今天寫尼日利亞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)
