Ini akan berhasil:
SELECT DISTINCT ID, regexp_substr("Strings", '[^ ]+', 1, LEVEL)
FROM T
CONNECT BY regexp_substr("Strings", '[^ ]+', 1, LEVEL) IS NOT NULL
ORDER BY ID;
Perhatikan bagaimana saya menggunakan regexp_substr
dalam klausa connect by juga. Ini untuk menangani kasus banyak spasi.
Jika Anda memiliki batas atas yang dapat diprediksi pada jumlah item per baris, mungkin ada baiknya membandingkan kinerja kueri rekursif di atas dengan CROSS JOIN
sederhana :
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;
Lihat http://sqlfiddle.com/#!4/444e3/1 untuk demo langsung