求助:当查询条件里In的参数是字符串型时

xlshen_lxz 2012-05-11 12:24:59
在做Oracle reports,写的PL/SQL,将下面的语句做在cursor里

cursor c_main_cursor(para varchar2) is
select dept_id from deps where dept_id in decode(para,'',dept_id, para);

由于dept_id是整型,输入参数如果是1,2,3,4会被当作字符串型而得到invalid number的错误。

有没有什么办法解决?

谢谢
...全文
189 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlshen_lxz 2012-05-11
  • 打赏
  • 举报
回复
动态游标我得拼接好多东西,太麻烦了,实在不行再用,谢谢
薛定谔之死猫 2012-05-11
  • 打赏
  • 举报
回复
改成动态SQL的游标吧,decode在动态SQL之外计算,就不会存在这样的问题了
xlshen_lxz 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
1 动态游标

2 拆分

where in (select regexp_substr('1,2,3,4','\d+',1,level) from dual connect by level <= 4)
[/Quote]

如果要返回好多行数据的,但又不确定可能返回多少行当,connect by level <=4怎么改?
谢谢
forgetsam 2012-05-11
  • 打赏
  • 举报
回复
1 动态游标

2 拆分

where in (select regexp_substr('1,2,3,4','\d+',1,level) from dual connect by level <= 4)
iqlife 2012-05-11
  • 打赏
  • 举报
回复
将字符串解析成字段类型即可
forgetsam 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:
1 动态游标

2 拆分

where in (select regexp_substr('1,2,3,4','\d+',1,level) from dual connect by level <= 4)


如果要返回好多行数据的,但又不确定可能返回多少行当,connect by level <=4怎么改?
谢谢
[/Quote]

level <= (select length(原字符串)-length(replace(原字符串,'分隔符比如,'))+1 from dual )
xlshen_lxz 2012-05-11
  • 打赏
  • 举报
回复
用instr做了搞定了
bayueguihuaxiang 2012-05-11
  • 打赏
  • 举报
回复
应该不会出现这样的错误
即便参数数据类型为varchar2,只要是数字字符,oracle会隐式转化为数字型的
xlshen_lxz 2012-05-11
  • 打赏
  • 举报
回复
针对3楼,有解答吗?

17,090

社区成员

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

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