Er is een bekende SQL-truc om door komma's gescheiden lijsten om te zetten in rijen. Gebruik die truc, voeg een DISTINCT
toe zoekwoord, en BULK COLLECT
de resultaten in je array (ik neem aan dat je verzameling bedoelt).
DECLARE
p_test_string VARCHAR2 (4000) := 'A,B,C,B,B,D';
TYPE string_array_type IS TABLE OF VARCHAR2 (4000);
l_array string_array_type;
BEGIN
SELECT DISTINCT REGEXP_SUBSTR (p_test_string,
'[^,]+',
1,
LEVEL)
BULK COLLECT INTO l_array
FROM DUAL
CONNECT BY REGEXP_SUBSTR (p_test_string,
'[^,]+',
1,
LEVEL)
IS NOT NULL
ORDER BY 1;
DBMS_OUTPUT.put_line ('l_array.count = ' || l_array.COUNT);
DBMS_OUTPUT.put_line ('l_array(2) = ' || l_array (2));
END;
Uitgang:
l_array.count = 4
l_array(2) = B