|
原帖由 谁 于 2008-5-26 10:24 发表 ![]()
哎,我不是说要同时兼顾代码长度和效率了
我意思是,将你们现有的代码,去除隐式转换
我运行一下看看能不能提高效率 
由于代码已经很精悍了,去除隐式转换应该也不会增加太多字节
如果要确保取出每一个隐式转换,包含精度的转换, 也会增加很多字节的. 我的转换后如下:
create or replace function my_add_months
(
p_date_string varchar2,
p_months number
) return varchar2 is
c int := 100;
a int := to_number(p_date_string);
y int := round(to_number(a) / c / c);
m int := round(to_number(a) / c - y * c);
t int;
procedure p is
begin
t := to_number(substr('525454554545', m, 1));
t := round(t + 26 + 1 / (t + mod(y, 4) + instr(0, mod(y, c)) * mod(y, 400)));
end;
begin
p;
a := mod(to_number(a), c);
a := trunc(to_number(a) / t) * c + to_number(a);
m := m + p_months + y * 12 - 7;
y := round(m / 12);
m := m - y * 12 + 7;
p;
return to_char(y * c * c + m * c + least(to_number(a), t));
end;
加入所有的显示转换及精度转换后 475 Bytes. |
|