यह चाल चलनी चाहिए:
SELECT DISTINCT ID, regexp_substr("Strings", '[^ ]+', 1, LEVEL)
FROM T
CONNECT BY regexp_substr("Strings", '[^ ]+', 1, LEVEL) IS NOT NULL
ORDER BY ID;
ध्यान दें कि मैंने regexp_substr
का उपयोग कैसे किया? क्लॉज द्वारा कनेक्ट में भी। यह एकाधिक रिक्त स्थान के मामले से निपटने के लिए है।
यदि आपके पास प्रति पंक्ति मदों की संख्या पर एक अनुमानित ऊपरी सीमा है, तो यह एक साधारण 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;
लाइव डेमो के लिए http://sqlfiddle.com/#!4/444e3/1 देखें