Có nhiều tùy chọn. Xem Split single comma delimited string into rows in Oracle
Bạn chỉ cần thêm CẤP trong danh sách lựa chọn như một cột, để có được những chuỗi số để mỗi hàng trả lại. Hoặc, ROWNUM cũng sẽ đủ.
Sử dụng bất kỳ SQL nào dưới đây, bạn có thể đưa chúng vào một FUNCTION.
INSTR trong CONNECT BY khoản:
SQL> WITH DATA AS
2 (SELECT 'word1, word2, word3, word4, word5, word6' str FROM dual
3 )
4 SELECT trim(regexp_substr(str, '[^,]+', 1, LEVEL)) str
5 FROM DATA
6 CONNECT BY instr(str, ',', 1, LEVEL - 1) > 0
7/
STR
----------------------------------------
word1
word2
word3
word4
word5
word6
6 rows selected.
SQL>
REGEXP_SUBSTR trong CONNECT BY khoản:
SQL> WITH DATA AS
2 (SELECT 'word1, word2, word3, word4, word5, word6' str FROM dual
3 )
4 SELECT trim(regexp_substr(str, '[^,]+', 1, LEVEL)) str
5 FROM DATA
6 CONNECT BY regexp_substr(str , '[^,]+', 1, LEVEL) IS NOT NULL
7/
STR
----------------------------------------
word1
word2
word3
word4
word5
word6
6 rows selected.
SQL>
REGEXP_COUNT trong CONNECT BY khoản:
SQL> WITH DATA AS
2 (SELECT 'word1, word2, word3, word4, word5, word6' str FROM dual
3 )
4 SELECT trim(regexp_substr(str, '[^,]+', 1, LEVEL)) str
5 FROM DATA
6 CONNECT BY LEVEL
Sử dụng XMLTABLE
SQL> WITH DATA AS
2 (SELECT 'word1, word2, word3, word4, word5, word6' str FROM dual
3 )
4 SELECT trim(COLUMN_VALUE) str
5 FROM DATA, xmltable(('"' || REPLACE(str, ',', '","') || '"'))
6/
STR
------------------------------------------------------------------------
word1
word2
word3
word4
word5
word6
6 rows selected.
SQL>
Sử dụng MODEL khoản:
SQL> WITH t AS
2 (
3 SELECT 'word1, word2, word3, word4, word5, word6' str
4 FROM dual) ,
5 model_param AS
6 (
7 SELECT str AS orig_str ,
8 ','
9 || str
10 || ',' AS mod_str ,
11 1 AS start_pos ,
12 Length(str) AS end_pos ,
13 (Length(str) - Length(Replace(str, ','))) + 1 AS element_count ,
14 0 AS element_no ,
15 ROWNUM AS rn
16 FROM t)
17 SELECT trim(Substr(mod_str, start_pos, end_pos-start_pos)) str
18 FROM (
19 SELECT *
20 FROM model_param MODEL PARTITION BY (rn, orig_str, mod_str)
21 DIMENSION BY (element_no)
22 MEASURES (start_pos, end_pos, element_count)
23 RULES ITERATE (2000)
24 UNTIL (ITERATION_NUMBER+1 = element_count[0])
25 (start_pos[ITERATION_NUMBER+1] = instr(cv(mod_str), ',', 1, cv(element_no)) + 1,
26 end_pos[iteration_number+1] = instr(cv(mod_str), ',', 1, cv(element_no) + 1)))
27 WHERE element_no != 0
28 ORDER BY mod_str ,
29 element_no
30/
STR
------------------------------------------
word1
word2
word3
word4
word5
word6
6 rows selected.
SQL>
Bạn cũng có thể sử dụng DBMS_UTILITY gói được cung cấp bởi Oracle. Nó cung cấp các chương trình con tiện ích khác nhau. Một tiện ích hữu ích như vậy là quy trình COMMA_TO_TABLE, chuyển đổi danh sách tên được phân tách bằng dấu phẩy thành một bảng tên PL/SQL.
đọc DBMS_UTILITY.COMMA_TO_TABLE
Xem [** Chia chuỗi phân cách bằng dấu phẩy đơn thành các hàng trong Oracle **] (https://lalitkumarb.com/2014/12/02/split-comma-delimited-string-into-rows-in-oracle/) –
Cố định liên kết trên, vui lòng xem [** Chia chuỗi phân cách bằng dấu phẩy đơn thành các hàng trong Oracle **] (https://lalitkumarb.wordpress.com/2014/12/02/split-comma-delimited-string-into- hàng-in-oracle /) –