关于带参数的游标问题

leborety 2005-09-26 08:05:04
有游标如下:
cursor mycur(v_ename varchar2) is
select * from emp where ename in v_ename;

传一个字符串
l_ename := 'test,test';

l_ename :='''test'',''test''';

这两种我都试了,均报错。不知道应传入什么形式的字符变量。
(l_ename := 'test';测试通过)
...全文
181 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
leborety 2005-09-27
  • 打赏
  • 举报
回复
呵呵,我已经在测试的时候改好了
给分
waterfirer 2005-09-27
  • 打赏
  • 举报
回复
我写错了,是这样
instr(v_ename,ename,1)>0
leborety 2005-09-27
  • 打赏
  • 举报
回复
packe_peng_520()
我想你不完全明白我的意思

解释下我的意思:
一般,我们的sql语句是
select * from emp where ename in ('test1','test2','test3');
现在,我要把这个sql语句放入游标,但是,in后面的值,我希望作为参数传入。不确定test_n这个n的值。我的目的不是研究'()'

xiao_fang(frank)
你的方法我知道,这里只是想知道我的操作有什么问题。

waterfirer(水清)
--这种办法不行,那是一个字符串,跟等于号没区别。
你的回答可以解释我的问题,谢了
waterfirer 2005-09-27
  • 打赏
  • 举报
回复
这种办法不行,那是一个字符串,跟等于号没区别。
你可以这样instr(v_ename,ename,1,length(v_ename))>0
laofang 2005-09-27
  • 打赏
  • 举报
回复
用这样的动态游标可以解决:

type cur is ref cursor;
cr cur;
begin
sqlstr:='select * from emp where ename in (' || v_ename || ')';
open cr for sqlstr;
loop
fetch cr into ...
exit when cr%notfound;
...

end loop;
end;
packe_peng_520 2005-09-27
  • 打赏
  • 举报
回复
我知道樓主的意思了,
传一个字符串
l_ename := 'test,test';

l_ename :='''test'',''test''';
然後用ename in l_ename 來判斷ename是不是在l_ename這個字符串裡面,是不是這個意思呢,
這樣是不行的,in後跟一個集合,當然集合可以是一個元素,當只有一個元素時,括號可以省略,但樓主的l_name,就是一個只含有'''test'',''test'''這個字符的集合,所以(l_ename := 'test';测试通过)這個是可以通過測試的,我的確不明白樓主為什麼要這麼做?我覺得這種方法也沒有研究的價值
超叔csdn 2005-09-27
  • 打赏
  • 举报
回复
()里面的东西也要加单引号啊.不过我没把握,我也没试过.
leborety 2005-09-27
  • 打赏
  • 举报
回复
to jxc(GameHeart)
你的方法适合固定变量数量,现在我并不知道逗号分开的字符串的个数。

to sbaz(万神渡劫)
'()'我试过的,不是这个问题
超叔csdn 2005-09-27
  • 打赏
  • 举报
回复
没试过,是不是少了'()'啊?
jxc 2005-09-27
  • 打赏
  • 举报
回复
cursor mycur(v_ename varchar2,v_ename2 varchar2) is
select * from emp where (ename = v_ename or ename=v_ename2);
packe_peng_520 2005-09-27
  • 打赏
  • 举报
回复
樓主才給我五分???????????????????以後不回你的貼了
氣憤

17,086

社区成员

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

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