所有这些需要在1个sql里完成。比如:“sum(abc)+avg(bcd)+sqrt(cde)”这个字符串里的()也许没有,也许1个或2个,但是最多2个。然后(select * from table where code =abc)union all(select * from table where code =bcd)union all(select * from table where code =cde)
现在的问题是我用什么样的sql能判断出字符串里有几对括号,然后将这些查询结果统一到一个表里?

解决方案 »

  1.   

    现在可以判断字符串里包含某些字符的个数了
    select (length('abcdabgjhdhfjkgab')-length(replace('abcdabgjhdhfjkgab','ab')))/length('ab') from dual;
      

  2.   

    直接一条语句,全部执行完不行么?如 
    EXECUTE IMMEDIATE '(select * from table where code =abc)union all(select * from table where code =bcd)union all(select * from table where code =cde)'否则,我想最好是做个存储过程,或者是函数,来返回你最终要的一条语句了!思路:1、先从这个字符串找到第一个“)”括号,再从这个右括号开始向左找,自右开始找的第一个左括号,这就是你要的第一条语句了,把这条语句先存到别处,不过要记录它在这个字符串中的起始位置;
    2、从最原始的字符串中清掉刚才那条语句,然后接着以此类推找第二条、第三条语句,直到全部找完!
      

  3.   

    这条是找括号位置的:SELECT INSTR('(SELECT * FROM A WHERE CODE IN (SELECT CODE FROM B))', ')') AS POINTLEFT FROM DUAL)
      

  4.   

    EXECUTE IMMEDIATE '(select * from table where code =abc)union all(select * from table where code =bcd)union all(select * from table where code =cde)'这个sql不行的,sum(abc)+avg(bcd)+sqrt(cde)这个字符串不是固定的,也许是1对括号,也许2对括号,也许没哟括号,如下所示的情况都有可能。你说用存储过程作行吗?abc
    sum(abc)+avg(bcd)
    sum(abc)+avg(bcd)+sqrt(cde)
      

  5.   

    用存储过程吧:传入存储过程一个参数:你的SQL语句字符串!
    存储过程输出一个结果:游标
      

  6.   

    没太看懂你要的结果,给出个过程的结构,自己把逻辑填写在
     /*sql处理代码*/这个地方吧。create or replace procedure test(result_message OUT VARCHAR2) is
    result_sum varchar2(10);
    result_avg varchar2(10);
    result_sqrt varchar2(10);begin
      /*sql处理代码*/
      
      result_message:=result_sum+result_avg+result_sqrt;
    end test;
      

  7.   

    存储过程和游标我都懂,就是2个合在一起怎么写就不知道了。我要实现的功能是判断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)
      

  8.   

    整个游标
    select substrb(rn,instr(rn,'(',1)+1)from
    (select regexp_substr('sum(abc)+avg(bcd)+sqrt(cde)','[^)]+',1,rownum) rn from dual connect by rownum<=length(regexp_replace('sum(abc)+avg(bcd)+sqrt(cde)','[^)]+')) 
    )
    然后遍历游标……
      

  9.   

    这个直接一条语句不就返回了吗?加 UNION ALL 啊?(select * from table where code =abc)
    UNION ALL
    (select * from table where code =bcd)
    UNION ALL
    (select * from table where code =cde)想不出,你这个不能用一条语句的情况!如果真的不能,那是为什么不能啊?
      

  10.   

    给来个最简单的 select instr('1111112','1',-1)  from dual