मेरे पास ऐसा डेटा है,

ID      RPT_NAME CSV_STRING
------------------------------
abc123  Test1   AA,BB,AC,AD,EF,GG,FG,FD,DF,GG,AA,PL,KI,LO,TT,TE,LF,FG
abc456  Test2   GF,DS,SA,RE,EW,QQ,QW
def123  Test3   HH

मैं अल्पविराम की निश्चित संख्या के लिए अल्पविराम विभाजन को पंक्तियों तक सीमित करना चाहता हूं। उसके बाद, मैं रिकॉर्ड का अगला सेट लूंगा, जब तक कि सभी रिकॉर्ड 6 के समूहों में पंक्तियों में धकेल दिए जाते हैं।

उदाहरण के लिए, मेरी ऑफसेट 5 अल्पविराम, . है मैं इस तरह आउटपुट प्राप्त करने की कोशिश कर रहा हूं,

ID      RPT_NAME CSV_STRING
----------------------
abc123  Test1   AA,BB,AC,AD,EF,GG
abc123  Test1   GG,FG,FD,DF,GG,AA
abc123  Test1   PL,KI,LO,TT,TE,LF
abc123  Test1   FG
abc456  Test2   GF,DS,SA,RE,EW,QQ
abc456  Test2   QW
def123  Test3   HH

मैंने इसे समझाने की पूरी कोशिश की। :)

क्या मुझे कृपया इस पर कोई समाधान मिल सकता है? टीआईए की सराहना की

1
AniruddhaK 6 मार्च 2017, 21:35
आप Oracle के किस संस्करण का उपयोग कर रहे हैं?
 – 
Gurwinder Singh
6 मार्च 2017, 21:36

1 उत्तर

सबसे बढ़िया उत्तर
with tab(ID,RPT_NAME,CSV_STRING) as
(
 select 'abc123','Test1','AA,BB,AC,AD,EF,GG,FG,FD,DF,GG,AA,PL,KI,LO,TT,TE,LF,FG' from DUAL
  union all
 select 'abc456','Test2','GF,DS,SA,RE,EW,QQ,QW' from DUAL
  union all
 select 'def123','Test3','HH' from DUAL
)


 select id,rpt_name,
        trim(trailing ',' from regexp_substr(csv_string,'([^,]+(,|$)){1,6}',1,level))
   from tab
connect by regexp_substr(csv_string,'([^,]+(,|$)){1,6}',1,level) is not null
    and prior id=id and prior dbms_random.value is not null

regexp_substr रेगुलर एक्सप्रेशन के साथ ([^,]+(,|$)){1,6} एक से छह तत्व प्राप्त करें। connect by स्ट्रिंग के पूर्ण होने तक पंक्ति को पुन: उत्पन्न करें।

0
Mike 6 मार्च 2017, 21:59
आप सर्वश्रेष्ठ हैं ! :) पूरी तरह से काम किया। वह उत्तर मेरे प्रश्न का है।
 – 
AniruddhaK
7 मार्च 2017, 20:06
इसे मेरी एक और टिप्पणी के रूप में मानें, एक चीज जो मेरे अंत में विफल हो रही है, मुझे इसके ऊपर एक और चयन जोड़ने की आवश्यकता है, लेकिन एक और कॉलम के लिए, और जहां यह विफल रहा है, समूह में क्लॉब का उपयोग किया जा रहा है जिसके द्वारा Oracle अनुमति नहीं देता है। कोई सुझाव ?
 – 
AniruddhaK
7 मार्च 2017, 20:10
बड़ा घूंघट? इसे क्वेरी में वर्चर (dbms_lob.substr()) में परिवर्तित किया जा सकता है
 – 
Mike
8 मार्च 2017, 11:31
लेकिन लंबाई बहुत बड़ी है, 4000 से अधिक जहां Varchar2 विफल रहता है
 – 
AniruddhaK
17 मार्च 2017, 16:49
भागों को संसाधित करना और परिणामों को संयोजित करना आवश्यक है। या एक संग्रहीत फ़ंक्शन बनाएं जो टोकन को हाइलाइट करता है
 – 
Mike
18 मार्च 2017, 10:15