将参数作为分隔字符串还有另一种可能的方式,例如:
其中#parameter 是简单的分隔字符串:“'1,2,3,4,5,6,7,8,9,10'”
SELECT U.A, U.B FROM C U WHERE U.A in ( SELECT SUBSTR ( STRING_TO_TOKENIZE , DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1) , INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) - DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1) ) FROM ( SELECT #parameter || ',' AS STRING_TO_TOKENIZE , ',' AS DELIMITER FROM DUAL ) 连接方式INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL)>0 )
诀窍在于以下子查询,因为它从分隔字符串返回已解析的行:
SELECT SUBSTR ( STRING_TO_TOKENIZE , DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1) ,
INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) - 解码(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1) ) FROM
(SELECT '1,2,3,4,5,6,7,8,9,10' || ',' AS STRING_TO_TOKENIZE , ',' 作为 DUAL 的分隔符)通过 INSTR 连接(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL )>0