存储过程参数的值不能有逗号?

weigangcn 2004-09-06 11:10:21
存储过程有一个参数,如果传入的值是:
1,2,3
那么在sql中的in后面使用时,系统会自动加上引号,变成:
'1,2,3'
不知大虾是否有比较简便的方法可以搞定这是问题?
谢先!
...全文
219 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dejkstro 2004-09-06
  • 打赏
  • 举报
回复
支持LGQDUCKY(飘)
LGQDUCKY 2004-09-06
  • 打赏
  • 举报
回复
其实你完全可以到里面在分割,要实现也可以,
CREATE OR REPLACE procedure p1(ccc IN char) is
begin
dbms_output.put_line(ccc);
end;
PL/SQL procedure successfully completed.


SQL> execute p1('1'||chr(44)||'2'||chr(44)||'3');
1,2,3

PL/SQL procedure successfully completed.
LGQDUCKY 2004-09-06
  • 打赏
  • 举报
回复
他是要传一个参数里面,包括逗号。
因为参数是一逗号分隔的,所有ORACLE会加上单引号,加以区分
wylwyl1130 2004-09-06
  • 打赏
  • 举报
回复
写错了
execute p1(1,2)
wylwyl1130 2004-09-06
  • 打赏
  • 举报
回复
你的参数类型是什么的,我用char试了一下,没问题的
CREATE OR REPLACE procedure p1(ccc IN char,bbb in char)
...
dbms_output.put_line(ccc);
dbms_output.put_line(bbb);
.....
.....

sqlplus :
execute p1(1,2)
1
2

过程成功执行
bzszp 2004-09-06
  • 打赏
  • 举报
回复
没有什么别的好办法了
动态sql很简单的
v_count number;
begin
...
str:='select count(1) from tbname where col in('||v_in||')';
execute immediate str into v_count;
...
weigangcn 2004-09-06
  • 打赏
  • 举报
回复
存储过程中的sql是静态的,只是有几个参数是从外面传给存储过程的,放在sql中的in的括号里面。
比如传进来的就是:
1,2,3
除了用动态sql,是否有别的方法?
谢先!
bzszp 2004-09-06
  • 打赏
  • 举报
回复
不会有这种问题
你是在组合动态sql语句的过程中吗?
你必须使用动态sql才能达到你的效果

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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