create or replace function f_getvalue return number is myResult number; a number(4); b number(5); c number(3); begin
a:=1; b:=3; c:=6; select a+b+c into myresult from dual; return(myResult); end f_getvalue;但愿能给lz的启发
create function f_Formula ( ps_f varchar2, pn_a number, pn_b number, pn_c number ) return number is vn_o number; vs_sql varchar2(800); begin vs_sql := ' declare a number; b number; c number; begin a := :a; b := :b; c := :c; :o := '||ps_f||'; end; '; EXECUTE IMMEDIATE vs_sql USING pn_a, pn_b, pn_c, OUT vn_o; return(vn_o); end f_Formula;
SELECT f_formula('a+b/c',1,2,3) FROM dual--结果 1.66666666666667
myResult number;
a number(4);
b number(5);
c number(3);
begin
a:=1;
b:=3;
c:=6;
select a+b+c into myresult from dual;
return(myResult);
end f_getvalue;但愿能给lz的启发
ps_f varchar2,
pn_a number,
pn_b number,
pn_c number
) return number is
vn_o number;
vs_sql varchar2(800);
begin
vs_sql := '
declare
a number;
b number;
c number;
begin
a := :a;
b := :b;
c := :c;
:o := '||ps_f||';
end;
';
EXECUTE IMMEDIATE vs_sql
USING pn_a, pn_b, pn_c, OUT vn_o;
return(vn_o);
end f_Formula;
这个问题是需要动态SQL来处理了。因为需要把a,b,c转换成传入的值。
我用的是C#.net