select (case when 9>7 then 1 else 0 end) from dual;
select case when to_number(substr(a,instr(a,'''',1),instr(a,'>')-instr(a,'''',1)-1))- to_number(substr(a,instr(a,'>')+1,length(a)-instr(a,'>')))>0 then 'T' else 'F' END from ( select '9>7' a from dual )--result: T 把上面写成一函数!
楼上辛苦了 我是想找个函数。类似js中eval方法。 不过还是感谢你先!
可以写在存储过程里,动态拼sql语句,最后execute
to yuxinglian: 这样的sql怎么写? 能否举例下?
记得回过一个几乎一模一样的问题,可是找不到那个帖子了 写个函数 create or replace function fun(condition in varchar2)return number as v_result number; sqlstr varchar2(1000):='select case when '; begin sqlstr:=sqlstr||condition||' then 1 else 0 end flag from dual'; execute immediate sqlstr into v_result; return v_result; end fun; 然后试试select fun('0>1') from dual;
create or replace procedure m ( a in varchar2, --开始日期 outdate out varchar2 )is begin select case when to_number(substr(a,instr(a,'''',1),instr(a,'>')-instr(a,'''',1)-1))- to_number(substr(a,instr(a,'>')+1,length(a)-instr(a,'>')))>0 then 'T' else 'F' END into outdate from dual ;end m;
create or replace procedure m ( a in varchar2, outdate out varchar2 )is begin select case when to_number(substr(a,instr(a,'''',1),instr(a,'>')-instr(a,'''',1)-1))- to_number(substr(a,instr(a,'>')+1,length(a)-instr(a,'>')))>0 then 'T' else 'F' END into outdate from dual ;end m;
select case when to_number(substr(a,instr(a,'''',1),instr(a,'>')-instr(a,'''',1)-1))-
to_number(substr(a,instr(a,'>')+1,length(a)-instr(a,'>')))>0 then 'T' else 'F' END
from
(
select '9>7' a from dual
)--result:
T
把上面写成一函数!
我是想找个函数。类似js中eval方法。
不过还是感谢你先!
这样的sql怎么写?
能否举例下?
写个函数
create or replace function fun(condition in varchar2)return number
as
v_result number;
sqlstr varchar2(1000):='select case when ';
begin
sqlstr:=sqlstr||condition||' then 1 else 0 end flag from dual';
execute immediate sqlstr into v_result;
return v_result;
end fun;
然后试试select fun('0>1') from dual;
( a in varchar2, --开始日期
outdate out varchar2
)is
begin
select
case when to_number(substr(a,instr(a,'''',1),instr(a,'>')-instr(a,'''',1)-1))-
to_number(substr(a,instr(a,'>')+1,length(a)-instr(a,'>')))>0 then 'T' else 'F' END into outdate
from dual ;end m;
( a in varchar2,
outdate out varchar2
)is
begin
select
case when to_number(substr(a,instr(a,'''',1),instr(a,'>')-instr(a,'''',1)-1))-
to_number(substr(a,instr(a,'>')+1,length(a)-instr(a,'>')))>0 then 'T' else 'F' END into outdate
from dual ;end m;