语句如下:
select *from emp where sal  >  100.00 其中关系符“>”和数字"100.00"都是前台传的参数,后台语句应是这样的:
for rec in( select *from emp where sal  || in_sign || in_sal) loop
...
end loop;但这个语句有语法问题是不能执行的,因为操作符好像不能是变量。用动态SQL倒是可以拼装。但动态SQL会影响效率,请教,除了动态SQL还有没有其它方法?谢谢!
数据库是oracle 10g的。

解决方案 »

  1.   

    sql有变量的情况应该只能动态去拼sql,然后用execute immeditae去执行吧
      

  2.   

    先判断符号,不同的符号执行不同的sql语句
    if in_sign =">" then
    ...............
    elseif in_sign ="<" then............
    endif
      

  3.   


    因为这是一个循环,所以我用动态SQL把记录读取后写到嵌套表里去了,然后再用open for cur..读出来返回的结果集。我也是没有办法了才用的动态SQL,可是,领导说在后台用动态SQL会影响效率,看能否想想其它办法。我实在没办法了,就把这句SQL放到java中去了。不过,我还是想知道有没有其它办法能够解决这个问题,所以在这里请教各位了。
      

  4.   


    用if..else要判断很多次,因为符号很多的,>、>=、<、<=、=就至少要判断5次哦。这样会造成代码冗余的。
      

  5.   

    for rec in( select *from emp where sal  || in_sign || in_sal) loop 
    ... 
    end loop; 如果上面语句中in_sign是个固定的符号这个语句就可以执行。固定的操作符后是可以接变量的,问题的关键是这样的语句中操作符不能是个变量。
      

  6.   

    你试试
    select *from emp where sal  &kk  100.00 
      

  7.   

    拼sql,并将查询的结果保存到零时表中,然后用执行sql串
    游标循环的零时表
    我以前在sql server 2000 中是这样做的oracle中不清楚,原理应该一样吧!!呵呵!!
    oracle还在学习中,oracle应该也有像零时表一样的东东吧!!呵呵呵!!
      

  8.   

    变量,如果不去枚举解析,那只能用动态sql,别无他法。
    15楼的方法可行。