ceygle@SZTYORA> create or replace function cac_val(v_str varchar2) 2 return number 3 is 4 v_res number(38,4); 5 begin 6 execute immediate 'select '||v_str||' from dual' into v_res; 7 return v_res; 8 exception when others then 9 return 0; 10 end; 11 /函数已创建。eygle@SZTYORA> select cac_val('2*10+3') from dual;CAC_VAL('2*10+3') ----------------- 23
-- 当出错的时候,就返回空值!create or replace function cac_val(v_str varchar2) return number is v_res number(38,4); begin execute immediate 'select '||v_str||' from dual' into v_res; return v_res; exception when others then return null; end; /select cac_val('2*10+3') from dual;
感谢大家的关注,这个问题我解决了,我是把一个表达式放在一个变量A里,想用另一个变量B接收这个变量A里的表达式的结果,用EXECUTE IMMEDIATE SELECT 表达式A FROM DUAL INTO B; 在这里也把这个方法跟大家分享一下,呵呵!
接着if判断 拆出来的运算符 是 '+' '-' '*' '/' 等等
然后就去运算吧 记得处理+-*/等的运算优先级
2 return number
3 is
4 v_res number(38,4);
5 begin
6 execute immediate 'select '||v_str||' from dual' into v_res;
7 return v_res;
8 exception when others then
9 return 0;
10 end;
11 /函数已创建。eygle@SZTYORA> select cac_val('2*10+3') from dual;CAC_VAL('2*10+3')
-----------------
23
return number
is
v_res number(38,4);
begin
execute immediate 'select '||v_str||' from dual' into v_res;
return v_res;
exception when others then
return null;
end;
/select cac_val('2*10+3') from dual;
在这里也把这个方法跟大家分享一下,呵呵!