Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

मल्टी कॉलम अर्धविराम से अलग स्ट्रिंग को विभाजित करें और रिकॉर्ड बनाएं

आप पैरामीटर को निम्नानुसार संसाधित कर सकते हैं:

SQL> declare
  2    type l_rec_type is record(
  3      r_ReqIDs  varchar2(31),
  4      r_ItemIDs varchar2(31),
  5      r_Qtys    varchar2(31)
  6    );
  7  
  8    type l_rec_list is table of l_rec_type;
  9    -- your parameters. 
 10    l_ReqIDs  constant varchar2(31) := '56;56;56;';
 11    l_ItemIDs constant varchar2(31) := '3;2;1;';
 12    l_Qtys    constant varchar2(31) := '400;300;200;';
 13  
 14    l_rec l_rec_list;
 15  begin
 16  
 17  with Parameters(param) as(
 18      select l_ReqIDs  from dual union all
 19      select l_ItemIDs from dual union all
 20      select l_Qtys    from dual
 21    ),
 22    Occurrences(oc) as(
 23      select level
 24        from ( select max(regexp_count(param, '[^;]+')) moc
 25                 from parameters) s
 26     connect by level <= s.moc
 27    )
 28  select max(res1)
 29       , max(res2)
 30       , max(res3)
 31    bulk collect into l_rec
 32    from (select decode(param, l_ReqIDs, res) res1
 33               , decode(param, l_ItemIDs,res) res2
 34               , decode(param, l_Qtys,   res) res3
 35               , rn
 36            from ( select param, regexp_substr(param, '[^;]+', 1, o.oc) res
 37                        , row_number() over(partition by param order by param) rn
 38                     from parameters p
 39                    cross join occurrences o
 40                  )
 41          )
 42  group by rn;
 43  
 44    for i in l_rec.first..l_rec.last
 45    loop
 46       dbms_output.put_line(l_rec(i).r_ReqIDs || '  ' || l_rec(i).r_ItemIDs || '  ' || l_rec(i).r_Qtys);
 47    end loop;
 48  end;
 49  /



56   2   200
56   1   300
56   3   400

PL/SQL procedure successfully completed

यदि आपको केवल संसाधित डेटा को तालिका में सम्मिलित करने की आवश्यकता है, तो केवल insert into कथन और क्वेरी की आवश्यकता होगी (bulk collect into l_rec हटा दिया जाना चाहिए):

insert into your_table(<<columns>>)
  with Parameters(param) as(
     select l_ReqIDs  from dual union all
     select l_ItemIDs from dual union all
     select l_Qtys    from dual
  .... 
  -- the rest of the query from the above pl/sql block.

आप एक तालिका में एक संपूर्ण रिकॉर्ड भी सम्मिलित कर सकते हैं (यदि आपको सम्मिलन से पहले निकाले गए तत्वों की अतिरिक्त प्रसंस्करण करने की आवश्यकता है) निम्नानुसार है:

  • यदि किसी तालिका में स्तंभों की संख्या सम्मिलित किए जा रहे तत्वों की संख्या के बराबर है

    for i in l_rec.first..l_rec.last
    loop
       insert into your_table
         values l_rec(i);
    end loop;
    
  • यदि किसी तालिका में स्तंभों की संख्या अधिक है तो सम्मिलित किए जाने वाले मानों की संख्या

    for i in l_rec.first..l_rec.last
    loop
       insert into (select column1, .. ,columnn from your_table)
         values l_rec(i);
    end loop;
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में रिकॉर्ड आधारित इंसर्ट और अपडेट

  2. एनाकोंडा 3.5 (64 बिट विंडोज़) cx_Oracle स्थापित करें

  3. सिद्धांत 2 जहां तुलना के बिना स्थिति

  4. वैकल्पिक डेटाबेस इकाइयाँ

  5. चयन और अद्यतन के बीच दौड़ की स्थिति