【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)
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)
相关文章推荐
- Oracle,INTERVAL DAY TO SECOND,EXTRACT (datetime)
- fetch oracle 存储过程
- oracle中插入一条数据id自动增长,插入之后得到这个id
- Oracle_Update...Set...From...解决方法Merge Into...Using...
- RHEL6.1 安装 Oracle10gr2 (图文、解析)
- 恢复oracle数据delete的数据
- oracle 表数据 误删时 数据恢复
- excel导入ORACLE的四个方法
- oracle 误删除数据之后的处理
- Oracle安全警示录:加错裸设备导致redo异常
- Oracle数据库语言——结构化查询语言SQL
- oracle 自动增长更新id
- ORACLE RMAN备份及还原
- Oracle 海量数据处理- 索引的选择
- oracle函数集锦
- 启动与关闭Oracle rac数据库集群
- Plsql连接Oracle 64位
- Oracle、聚石塔
- Oracle 11g 间隔分区(INTERVAL)批量规范命名
- ORACLE RAC 的启动和关闭顺序