存储过程中现有变量A,B,C......不定数量的变量,且都有赋值。现有动态字符串 STR :='A+B-C'(每次获得的字符串不同),如何求得STR字符串所表示的表达式的值?
        例如:A=1,B=2,C=3,D=4
        当STR := 'A+B'时,求得A+B=3;
        当STR := 'A-B'时,求得A-B=-1;
        当STR := 'A+B-C'时,求得A+B-C=0;
        如何实现求指点。

解决方案 »

  1.   

        declare
          str varchar2(10) := '1*2+3';
          sql_s varchar2(100);
          n number;
       begin
          sql_s := 'select '||str||' from dual';
          execute immediate sql_s into n;
          dbms_output.put_line(str ||' = '||n);
       end;
      

  2.   

    create or replace function getvalue(li_A number,li_B number,li_C number,ls_sql  varchar2) return number is
      li_return  number;
      ls varchar2(32);
    begin
      ls:=replace(replace(replace(ls_sql,'A',li_A),'B',li_B),'C',li_C);
      execute immediate 'select '||ls ||' from dual ' into li_return;
      return(li_return);
    end getvalue;
    这个只是是例子,作参考。