我写的一个存储过程中,一个sql语句需要动态的更新查询条件,这个查询条件就又我调用存储过程的时候当作参数传进来,比如: UF_REPORT_TEMPLATE(aa in VARCHAR2)  我传了一个条件:aa  aa传入存储过程中的sql语句:select * from test where 1=1 aa  注:aa的值为 and var>1  然后系统提示:无效的关系运算符
   但是sql语句写成:select * from test where 1=1 and var=aa  就正确!
   求高手解答:如何把一个条件(如:a>1)当作参数传入存储过程,让sql语句能够调用!谢谢

解决方案 »

  1.   

    select * from test where 1=1 and var=aa 你先说明白这个sql如何“正确”的,PL/SQL里面不允许直接写一个sql如果你把它做游标用,那么open 游标 for '拼接后的SQL字符串'如果你把它做into用,那么execute immediate '拼接后的SQL字符串' into 
      

  2.   


    我的语句是这样写的,如果把选中的 drug.id=aa 换成 aa  就不行,我要怎样才能换成aa后编译通过呢?
      

  3.   


    sqlstr varchar2(999);begin
      ......
      sqlstr := 'insert into ****** select *** where '||aa; --注意字符型要把单引号拼进aa里去
      execute immediate sqlstr ;
    end;
      

  4.   

    支持楼上的,
    declare sqlstr varchar2(999),
            aa varchar2(40);
    begin
     aa:=' and var>1';   --var 是你表中的一个字段
     sqlstr:='select * from test where 1=1'||aa;
     execute immediate sqlstr;
    end;