Dit zou moeten werken:
SELECT DISTINCT ID, regexp_substr("Strings", '[^ ]+', 1, LEVEL)
FROM T
CONNECT BY regexp_substr("Strings", '[^ ]+', 1, LEVEL) IS NOT NULL
ORDER BY ID;
Merk op hoe ik regexp_substr
. heb gebruikt ook in de connect by-clausule. Dit is om te gaan met het geval van meerdere spaties.
Als je een voorspelbare bovengrens hebt voor het aantal items per regel, is het misschien de moeite waard om de prestaties van de recursieve zoekopdracht hierboven te vergelijken met een simpele CROSS JOIN
:
WITH N as (SELECT LEVEL POS FROM DUAL CONNECT BY LEVEL < 10)
-- ^^
-- up to 10 substrings
SELECT ID, regexp_substr("Strings", '[^ ]+', 1, POS)
FROM T CROSS JOIN N
WHERE regexp_substr("Strings", '[^ ]+', 1, POS) IS NOT NULL
ORDER BY ID;
Zie http://sqlfiddle.com/#!4/444e3/1 voor een live demo