create or replace function cal(v_str varchar2)
return number is
v_s varchar2(200);
v_result number;
begin 
   v_s:='select '||v_str||' from dual';
   execute immediate v_s into v_result;
   return v_result;
end;在sql命令中使用select cal(2+5*2.3/100-4.5-2.6) from dual;
呵呵,看到楼主发的另一个帖了,拿来骗分了!

解决方案 »

  1.   

    select 2+5*2.3/100-4.5-2.6 from dual;2+5*2.3/100-4.5-2.6
    -------------------
                 -4.985已选择 1 行。
      

  2.   

    上面网友的函数可行, SELECT CAL('2+5*2.3/100-4.5-2.6') FROM DUAL
      

  3.   

    就按照magicnbh() 的方法了:在多加个异常处理就好多了create or replace function cal(v_str varchar2)
    return number is
    v_s varchar2(200);
    v_result number;
    begin 
     BEGIN
      v_s:='select '||v_str||' from dual';
       execute immediate v_s into v_result;
       EXCEPTION
             WHEN OTHERS THEN
            v_result :=-9999; 
       END;
     return v_result;
    end;
      

  4.   

    select 2+5*2.3/100-4.5-2.6 from dual
      

  5.   

    select 2+5*2.3/100-4.5-2.6 from dual
    就可以拉~