解决方案 »

  1.   

    你加个if条件来判断就行了啊,不同的sqlstr执行不同的的SQL语句
      

  2.   

    你加个if条件来判断就行了啊,不同的sqlstr执行不同的的SQL语句
    嗯,就是因为我加了if才会有的参数不能出现在sql字符串中,才导致执行sql字符串后,出现“缺失关键字”的重大问题。
      

  3.   

    嗯,就是因为我加了if才会有的参数不能出现在sql字符串中,才导致执行sql字符串后,出现“缺失关键字”的重大问题。
    我的意思是你根据sqlstr中是否含有where来通过if判断进行不同的open。
    比如:
    if instr(sqlstr,':spBegRow')<>=0 then
    open plistLog for sqlstr using pBegRow,pEndRow;
    else
    open plistLog for sqlstr;
    end if;
      

  4.   

    嗯,就是因为我加了if才会有的参数不能出现在sql字符串中,才导致执行sql字符串后,出现“缺失关键字”的重大问题。
    我的意思是你根据sqlstr中是否含有where来通过if判断进行不同的open。
    比如:
    if instr(sqlstr,':spBegRow')<>=0 then
    open plistLog for sqlstr using pBegRow,pEndRow;
    else
    open plistLog for sqlstr;
    end if;
    那么if的嵌套深度就变成2的乘方了。比如条件有两个,条件1和条件2,那么if只能这么写了if 条件1 then
      if 条件2 then
        open plistLog for sqlstr using 条件1,条件2;
      else
        open plistLog for sqlstr using 条件1;
      end if;
    else
      if 条件2 then
        open plistLog for sqlstr using 条件2;
      else
        open plistLog for sqlstr;
      end if;
    end if;
      

  5.   

    上面的代码貌似没有后面描述得问题
    into和using后面的参数不能动态拼接,后面跟的是多个变量,自然不能放到一个变量里一般来说,select into 后面跟的变量都是固定的。每个查询都有检索的目标,这个目标不确定是件很奇怪的事。如果真有这样的需求,可以用下面的方法来绕过去:
    例如
    execute immediate 'select a,b,c,d,e from ...' into v_a,v_b,v_c,v_d,v_e;
    在某些条件下,只能检索出a,b,c 那么用d,e用null来占位即可
    execute immediate 'select a,b,c,null,null from ...' into v_a,v_b,v_c,v_d,v_e;至于using后面的变量,建议只用在固定的条件上。变动的条件,直接将值拼接在语句中。using clause的一个好处是可以使用绑定变量,但是它根据动态语句中的绑定变量标识符来按顺序对号入座,给动态的条件带来很大的麻烦