Birden çok seçenek vardır. Sadece döndü her satır için dizisi numarası almak için, bir sütun olarak seçme listesinde LEVEL eklemem gerekiyor Split single comma delimited string into rows in Oracle
bakınız. Veya, ROWNUM da yeterli olacaktır.
Aşağıdaki SQL'lerden herhangi birini kullanarak bunları bir FUNCTION'a ekleyebilirsiniz.
madde İLE InStrCONNECT içinde:İLE CONNECT içinde
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: madde İLE
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_SUBSTRCONNECT içindefıkra:
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
kullanma MODEL maddesini kullanarak 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>
:
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>
Ayrıca kullanabilirsiniz DBMS_UTILITY Oracle tarafından sağlanan paketi. Çeşitli faydalı alt programlar sağlar. Böyle yararlı bir yardımcı program, adların virgülle ayrılmış bir listesini bir PL/SQL ad tablosuna dönüştüren COMMA_TO_TABLE yordamı'dur.
Oku DBMS_UTILITY.COMMA_TO_TABLE
Bkz. [** Tek virgülle ayrılmış dizeyi Oracle'daki satırlara ayırın] (https://lalitkumarb.com/2014/12/02/split-comma-delimited-string-into-rows-in-oracle/) –
Bağlantının üstünde, lütfen [** Tek virgülle ayrılmış dizeyi Oracle'da satırlara ayırın] (https://lalitkumarb.wordpress.com/2014/12/02/split-comma-delimited-string-into- satır-in-oracle /) –