求助oracle中将含有运算符和括号的字符串转换成公式并且运算结果

时间:2021-12-21 00:50:44
  比如这个字符串是'(2+3)*2+(3+2)%5',反正这个字符串中包括()+ - * / %数字都有!要把这个字符串转换为公式并且运算结果,求高手指点,最好写个函数!反正有办法点子都行!
  比如to_number'(3+2)'是不行的
  这样可以to_number('3'+'2'/2);
求知。。。。。高手解决,谢谢!!!!!

4 个解决方案

#1


你括号里的公式不是oracle的,oracle 不认 % 运算符

#2


-- 自己写个函数:

scott@TBWORA> create table tb(cat_str varchar2(20));

表已创建。

scott@TBWORA> insert into tb(cat_str) values('(2+3)*2+(3+2)/5');

已创建 1 行。

scott@TBWORA>
scott@TBWORA> create or replace function f_cat(c_char varchar2)
  2  return number
  3  is
  4    v_num number(18,4);
  5  begin
  6    execute immediate 'select '||c_char||' from dual' into v_num;
  7    return v_num;
  8  exception when others then
  9    return null;
 10  end;
 11  /

函数已创建。

scott@TBWORA>
scott@TBWORA> select  cat_str, f_cat(cat_str) as cat_result from tb;

CAT_STR                                  CAT_RESULT
---------------------------------------- ----------
(2+3)*2+(3+2)/5                                  11


#3


引用 1 楼 opps_zhou 的回复:
你括号里的公式不是oracle的,oracle 不认 % 运算符


-- 对头:注意:oracle 不认 % 运算符

#4


感谢2楼,immediate这个没见过,我是个初学者,望以后多多指教!

#1


你括号里的公式不是oracle的,oracle 不认 % 运算符

#2


-- 自己写个函数:

scott@TBWORA> create table tb(cat_str varchar2(20));

表已创建。

scott@TBWORA> insert into tb(cat_str) values('(2+3)*2+(3+2)/5');

已创建 1 行。

scott@TBWORA>
scott@TBWORA> create or replace function f_cat(c_char varchar2)
  2  return number
  3  is
  4    v_num number(18,4);
  5  begin
  6    execute immediate 'select '||c_char||' from dual' into v_num;
  7    return v_num;
  8  exception when others then
  9    return null;
 10  end;
 11  /

函数已创建。

scott@TBWORA>
scott@TBWORA> select  cat_str, f_cat(cat_str) as cat_result from tb;

CAT_STR                                  CAT_RESULT
---------------------------------------- ----------
(2+3)*2+(3+2)/5                                  11


#3


引用 1 楼 opps_zhou 的回复:
你括号里的公式不是oracle的,oracle 不认 % 运算符


-- 对头:注意:oracle 不认 % 运算符

#4


感谢2楼,immediate这个没见过,我是个初学者,望以后多多指教!