Tohle by mělo stačit:
SELECT DISTINCT ID, regexp_substr("Strings", '[^ ]+', 1, LEVEL)
FROM T
CONNECT BY regexp_substr("Strings", '[^ ]+', 1, LEVEL) IS NOT NULL
ORDER BY ID;
Všimněte si, jak jsem použil regexp_substr
také ve spojení klauzulí. Toto je řešení případu více mezer.
Pokud máte předvídatelnou horní hranici počtu položek na řádek, možná by stálo za to porovnat výkony výše uvedeného rekurzivního dotazu pomocí jednoduchého 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;
Živé demo naleznete na http://sqlfiddle.com/#!4/444e3/1