锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
Server Oracle 11g
Client Oracle 10g
vs_string 杈撳叆鍙傛暟鏍煎紡濡?info1,info22,info333,info4444',浠?,"鍋氶棿闅旂,姣忓彉閲忛暱搴︿笉紜畾
vn_num vs_string 涓悎騫舵嫾鎺ョ殑鍙橀噺鏁伴噺
SELECT SUBSTR(vs_string,
DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1,
DECODE(LEVEL,vn_num,LENGTH(vs_string),INSTR(vs_string,',',1,DECODE(LEVEL,1,1,LEVEL))-1)-
(DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1)+1)
FROM DUAL
CONNECT BY LEVEL <= (SELECT REGEXP_COUNT(vs_string,',',1,'i')+1 FROM DUAL);
鍦╫racle 涓?IN 鍑芥暟鍙兘瀵規(guī)煡璇㈢殑緇撴灉闆嗘垨鏄庣‘鐨勫弬鏁伴泦鍚堣繘琛屽琛屾煡璇紝瀵逛簬涓涓弬鏁版棤璁哄叾琛ㄧ幇褰㈠紡鍙兘榪涜涓涓弬鏁扮殑鍒ゆ柇鏌ヨ
濡?/p>
EMPLOYEE_T 琛ㄤ腑瀛樺湪濡備笅鏁版嵁
EMPLOYEE_ID EMPLOYEE_NAME
--------------------------------
001 znp
002 zsj
003 zhsj
SELECT EMPLOYEE_ID,EMPLOYEE_NAME FROM EMPLOYEE_T WHERE EMPLOYEE_ID IN ('001','002')鐨勬煡璇㈢粨鏋滃涓?/p>
EMPLOYEE_ID EMPLOYEE_NAME
--------------------------------
001 znp
002 zsj
SELECT EMPLOYEE_ID,EMPLOYEE_NAME FROM EMPLOYEE_T WHERE EMPLOYEE_ID IN ('001,002')鐨勬煡璇㈢粨鏋滃涓?/p>
EMPLOYEE_ID EMPLOYEE_NAME
--------------------------------
鍦?SELECT * FROM EMPLOYEE_T WHERE EMPLOYEE_ID IN ('001,002') 涓?"'001,002'" 鍙兘鍋氫負(fù)涓涓叆鍙傝屼笉鏄袱涓叆鍙?鍙傛暟鍊間負(fù)
'001,002' ,鏁呮煡涓嶅埌鍚堥傜殑璁板綍
鍦ㄥ瓨鍌ㄨ繃紼嬩腑瀵逛簬浠ヤ笂鐨勫叆鍙傚彲浠ラ噰鍙栦袱縐嶅姙娉曡繘琛?/p>
1銆侀氳繃鎷兼帴鍔ㄦ丼QL榪涜鏌ヨ
vs_sql := 'SELECT EMPLOYEE_ID,EMPLOYEE_NAME FROM EMPLOYEE_T WHERE EMPLOYEE_ID IN ('||CHR(39)||'001'||CHR(39)||','||CHR(39)||'002'||CHR(39)||');
OPEN _cur FOR vs_sql;
2銆佸皢鎷兼帴涓茶漿涓虹粨鏋滈泦杈撳嚭鑷矷N鍑芥暟涓?浣跨敤濡備笅鑴氭湰
vs_string 杈撳叆鍙傛暟鏍煎紡濡?info1,info22,info333,info4444',浠?,"鍋氶棿闅旂,姣忓彉閲忛暱搴︿笉紜畾
vn_num vs_string 涓悎騫舵嫾鎺ョ殑鍙橀噺鏁伴噺
SELECT SUBSTR(vs_string,
DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1,
DECODE(LEVEL,vn_num,LENGTH(vs_string),INSTR(vs_string,',',1,DECODE(LEVEL,1,1,LEVEL))-1)-
(DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1)+1)
FROM DUAL
CONNECT BY LEVEL <= (SELECT REGEXP_COUNT(vs_string,',',1,'i')+1 FROM DUAL);
鐓у姙涓婁緥,鍗充負(fù)
SELECT EMPLOYEE_ID,EMPLOYEE_NAME FROM EMPLOYEE_T
WHERE EMPLOYEE_ID IN
(
SELECT SUBSTR(vs_string,
DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1,
DECODE(LEVEL,vn_num,LENGTH(vs_string),INSTR(vs_string,',',1,DECODE(LEVEL,1,1,LEVEL))-1)-
(DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1)+1)
FROM DUAL
CONNECT BY LEVEL <= (SELECT REGEXP_COUNT(vs_string,',',1,'i')+1 FROM DUAL)
);