关于字符串的in中使用

tianyacao007 2006-12-11 02:55:17
declare
v_str varchar2(32767);
v_num number;
begin
v_str := '''124''';
v_str := v_str || ',';
v_str := v_str || '''B737-700''';
select count(*) into v_num from item where itemnum in (v_str);
dbms_output.put_line(v_str|| ' ' ||v_num);
end;

输出结果:'124','B737-700' 0
说明v_str为'124','B737-700',而itemnum in (v_str)应该为itemnum in ('124','B737-700')
但是输出结果为空;


select count(*) into v_num from item where itemnum in ('124','B737-700');

这个结果为2
...全文
367 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
山林73 2006-12-12
  • 打赏
  • 举报
回复
select * from t
where instr(v_str,''''|| itemnum ||'''') >0;


--or:

vstr :='124,B737-700'
vstr :=','|| vstr || ','

select * from t
where instr(v_str,','|| itemnum ||',') >0;

tianyacao007 2006-12-11
  • 打赏
  • 举报
回复
好的!谢谢各位!libin_ftsafe(子陌红尘:当libin告别ftsafe),doer_ljy(可战) ,tgm78() ,letsflytogether(伍子)

明天结贴
doer_ljy 2006-12-11
  • 打赏
  • 举报
回复
不用动态SQL相当于
in('''124'',''B737-700''')
你说可能可以吗?
子陌红尘 2006-12-11
  • 打赏
  • 举报
回复
我就想搞清楚:我不用动态语言为什么不可以!?
-------------------------------------------------------------------------
因为 v_str 是一个字符串' '124','B737-700' ',而不是一组字符串 '124','B737-700'。

伍子V5 2006-12-11
  • 打赏
  • 举报
回复
前面的字符串连接你都知道用||

select count(*) into v_num from item where itemnum in (v_str);
这条语句你为什么就可以直接连接起来
tgm78 2006-12-11
  • 打赏
  • 举报
回复
需要用动态sql的吧
伍子V5 2006-12-11
  • 打赏
  • 举报
回复
动态SQL
tianyacao007 2006-12-11
  • 打赏
  • 举报
回复
谢谢你,我知道!我就想搞清楚:我不用动态语言为什么不可以!?
子陌红尘 2006-12-11
  • 打赏
  • 举报
回复
v_str := 'select count(*) into v_num from item where itemnum in ('|| v_str ||')';

execute immediate v_str;

17,089

社区成员

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

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