oracle存储过程调用

ladofwind 2010-08-12 10:42:09
我有个需求是这样的,

select * from tableA where name not in (..............) ,

这个not in 后面的list经常变, 所以我想把它写在function里,

*************************************************************************************/
function getEXCLUDENAME return varchar2
is
begin
return 'a,b,c,..........................';
end;


但是不能select * from tableA where name not in (getEXCLUDENAME) 这么调用,
求解决方案, 因为sql是在程序里的,程序升级很麻烦,而如果写在数据库端, 随时都能动,方便配置更改.

...全文
65 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ladofwind 2010-08-12
  • 打赏
  • 举报
回复
看来没什么好办法了,就这么干吧
ladofwind 2010-08-12
  • 打赏
  • 举报
回复
嗯,是行,我看了业务逻辑,前面不好改,前面是先写定sql 传给另外一个模块去执行的, 所以最好
这个业务就是一次调用, 如果那么改就两个调用了.
minitoy 2010-08-12
  • 打赏
  • 举报
回复
可以吧。。。
前端写sql不一般也是先拼sql再调用执行么?
ladofwind 2010-08-12
  • 打赏
  • 举报
回复
不行,我的sql是写在java里的
小灰狼W 2010-08-12
  • 打赏
  • 举报
回复
那就先执行函数返回到前端,假设这个变量是v
'select * from tableA where name not in (' + v + ')' 拼出sql
minitoy 2010-08-12
  • 打赏
  • 举报
回复
用动态sql
declare
v_sql varchar2(1000);
begin
v_sql:='select * from tableA where name not in ('||getEXCLUDENAME||')';
execute immediate v_sql;
end;
ngx20080110 2010-08-12
  • 打赏
  • 举报
回复
用動態SQL吧。

execute immediate 'select * from tablea where name not in (' || getexcludename || ')';

然後要修改一下getexcludename
return '''a'',''b'',''c'',...'

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧