最近遇到一个奇葩的问题,
我需要在前台传参数到数据库存储过程里使用。
参数里面的数据是形如这样1355000004,1355000005,1355000005传进去的。
最后参数放进存储过程里面会报"无效数字"的错。
但是单独将SQL语句拿出来,将参数里面的值带进去又能成功的查询出想要的结果。
最开始我以为是传进去的值得格式不正确,
我又将它弄成了数组的形式传进去,
形如:'1355000004','1355000005','1355000005'
发现还是没效果,还是报一样的错。
最后问了前辈,才知道原因
因为oracle没有数组,只有结果集。
in函数只接受单列结果集。
最终,我用这段代码处理了一下
(select regexp_substr('aaa,bbb,ccc','[^,]+', 1, level) as id_arr from dual connect by level <= length('aaa,bbb,ccc')-length(regexp_replace('aaa,bbb,ccc', ','))+1)
上面代码就是将逗号分隔的字符串转成单列结果集。
这样就能使用in函数了。