您的位置:首页 > 数据库 > Oracle

【ORACLE】IN 后跟&参数字符串的处理方法

2016-06-02 18:04 405 查看
今天写尼日利亚BOSS,数据修复脚本时遇到一个问题, 参数字符串无法再IN中使用,例如:想要完成下面的查询

select * From customeren c where c.customercodestr in (&CODE);

最先想到的是用regexp_replace来拼接字符串,将中间符号替换成‘,’ 以便后续拼接

SELECT '''' || regexp_replace('TTP0001;TTP0002;TTP0003', ';', ''',''') || '''' FROM dual;
测试了下结果很满意: 'TTP0001','TTP0002','TTP0003'

可是执行时,却还是不行查询不到任何结果,
select *
From customeren c
where c.customercodestr in
(SELECT '''' || regexp_replace('TTP0001;TTP0002;TTP0003',
';',
''',''') || ''''
FROM dual)

猜测主要原因是, IN 后面的括号内,不能用字符串拼接,括号内并不是一个字符串

最后通过字符串截取拼接实现: 示列SQL 如下

select *
From customeren c
where c.customercodestr in
(SELECT REGEXP_SUBSTR('&客户编码', '[^;]+', 1, rownum)
FROM DUAL
CONNECT BY ROWNUM <=
LENGTH('&客户编码') - LENGTH(REPLACE('&客户编码', ';', '')) + 1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: