日期:2014-05-17  浏览次数:20776 次

帮忙看看怎么写这个存储过程?
我要实现的功能是判断1个字符串中有几对括号? 用每个括号内的值,作为一个查询条件,返回一个结果。并把这些结果集合并后返回。


比如:“sum(abc)+avg(bcd)+sqrt(cde)”这个字符串里的()也许没有,也许1个或2个,但是最多2个。
然后分别得到下面3个或2个或1个查询的结果,并返回

(select * from table where code ='abc')

(select * from table where code ='bcd')

(select * from table where code ='cde')

------解决方案--------------------
declare
v_num1 number:=0;
v_num2 number:=0;
v_length number:=0;
v_str varchar2(100):='sum(abc)+avg(bcd)+sqrt(cde)';
v_str2 varchar2(100);
v_start number:=1;
begin
v_length :=length(v_str);
for i in v_start.. v_length 
loop
if i =v_start then
v_num1 :=instr(v_str,'(',i,1); 
v_num2 :=instr(v_str,')',i,1); 
v_str2 :=substr(v_str,v_num1+1,v_num2-v_num1-1);--最终结果,后续需要怎么处理再怎么处理
v_start:=v_num2+1;
dbms_output.put_line(v_str2);
else null;
end if;
end loop ;
end;
------解决方案--------------------
v_sql:='select * from table where code ='||v_str2;

作为变量调用啊