यह एक बेहतर तरीका हो सकता है (रेगेक्सपी के साथ भी और इसके द्वारा कनेक्ट करें):
with temp as
(
select 108 Name, 'test' Project, 'Err1, Err2, Err3' Error from dual
union all
select 109, 'test2', 'Err1' from dual
)
select distinct
t.name, t.project,
trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value)) as error
from
temp t,
table(cast(multiset(select level from dual connect by level <= length (regexp_replace(t.error, '[^,]+')) + 1) as sys.OdciNumberList)) levels
order by name
संपादित करें :यहाँ एक सरल (जैसे, "गहराई से नहीं") क्वेरी की व्याख्या है।
length (regexp_replace(t.error, '[^,]+')) + 1
regexp_replace
का उपयोग करता है कुछ भी मिटाने के लिए जो सीमांकक नहीं है (इस मामले में अल्पविराम) औरlength +1
कितने तत्व (त्रुटियां) प्राप्त करने के लिए।-
select level from dual connect by level <= (...)
पदानुक्रमित क्वेरी . का उपयोग करता है 1 से त्रुटियों की कुल संख्या तक, मिलानों की बढ़ती संख्या के साथ एक स्तंभ बनाने के लिए।पूर्वावलोकन:
select level, length (regexp_replace('Err1, Err2, Err3', '[^,]+')) + 1 as max from dual connect by level <= length (regexp_replace('Err1, Err2, Err3', '[^,]+')) + 1
-
table(cast(multiset(.....) as sys.OdciNumberList))
ऑरैकल प्रकारों की कुछ कास्टिंग करता है।- द
cast(multiset(.....)) as sys.OdciNumberList
के रूप में कई संग्रह (मूल डेटा सेट में प्रत्येक पंक्ति के लिए एक संग्रह) को संख्याओं के एकल संग्रह, OdciNumberList में बदल देता है। - द
table()
फ़ंक्शन एक संग्रह को एक परिणामसेट में बदल देता है।
- द
-
FROM
शामिल हुए बिना क्रॉस जॉइन . बनाता है आपके डेटासेट और मल्टीसेट के बीच। परिणामस्वरूप, 4 मैचों के साथ डेटा सेट में एक पंक्ति 4 बार दोहराई जाएगी ("column_value" नामक कॉलम में बढ़ती संख्या के साथ)।पूर्वावलोकन:
select * from temp t, table(cast(multiset(select level from dual connect by level <= length (regexp_replace(t.error, '[^,]+')) + 1) as sys.OdciNumberList)) levels
trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value))
column_value
. का उपयोग करता है nth_appearance/ocurrence . के रूप मेंregexp_substr
. के लिए पैरामीटर ।- आप अपने डेटा सेट से कुछ अन्य कॉलम जोड़ सकते हैं (
t.name, t.project
एक उदाहरण के रूप में) आसान विज़ुअलाइज़ेशन के लिए।
Oracle डॉक्स के कुछ संदर्भ:
- REGEXP_REPLACE
- REGEXP_SUBSTR
- एक्स्टेंसिबिलिटी स्थिरांक, प्रकार, और मैपिंग (OdciNumberList)
- कास्ट (मल्टीसेट)
- पदानुक्रमित प्रश्न