语句如下:
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的。
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的。
if in_sign =">" then
...............
elseif in_sign ="<" then............
endif
因为这是一个循环,所以我用动态SQL把记录读取后写到嵌套表里去了,然后再用open for cur..读出来返回的结果集。我也是没有办法了才用的动态SQL,可是,领导说在后台用动态SQL会影响效率,看能否想想其它办法。我实在没办法了,就把这句SQL放到java中去了。不过,我还是想知道有没有其它办法能够解决这个问题,所以在这里请教各位了。
用if..else要判断很多次,因为符号很多的,>、>=、<、<=、=就至少要判断5次哦。这样会造成代码冗余的。
...
end loop; 如果上面语句中in_sign是个固定的符号这个语句就可以执行。固定的操作符后是可以接变量的,问题的关键是这样的语句中操作符不能是个变量。
select *from emp where sal &kk 100.00
游标循环的零时表
我以前在sql server 2000 中是这样做的oracle中不清楚,原理应该一样吧!!呵呵!!
oracle还在学习中,oracle应该也有像零时表一样的东东吧!!呵呵呵!!
15楼的方法可行。