आप पैरामीटर को निम्नानुसार संसाधित कर सकते हैं:
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;