在ORACLE中,
我现在有一个表达式,比如是‘1+2*3’
我想用一个变量接收这个表达式的值,请问是用什么办法啊?
我现在接收到的值就一直是这个表达式,而不能取到值

解决方案 »

  1.   

    select 1+2*3 into 变量 from dual
      

  2.   

    用正则 匹配你传给变量的串 然后拆分 通过to_number 转换拆出来的数字 
    接着if判断 拆出来的运算符 是 '+'  '-'  '*' '/' 等等 
    然后就去运算吧 记得处理+-*/等的运算优先级
      

  3.   

    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
      

  4.   

    -- 当出错的时候,就返回空值!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;
      

  5.   

    感谢大家的关注,这个问题我解决了,我是把一个表达式放在一个变量A里,想用另一个变量B接收这个变量A里的表达式的结果,用EXECUTE IMMEDIATE SELECT 表达式A FROM DUAL INTO B;
    在这里也把这个方法跟大家分享一下,呵呵!