2012-03-09 17 views
6

के माध्यम से पीएल/एसक्यूएल पाश मेरी समस्या अत्यधिक जटिल नहीं है, लेकिन मैं पीएल/एसक्यूएल के लिए नौसिखिया हूं।कर्सर

मुझे कुछ शर्तों के आधार पर एक कंपनी तालिका से चयन करने की आवश्यकता है। इसके बाद मुझे इनके माध्यम से लूप करने की आवश्यकता है और कुछ फ़ील्ड को एक अलग प्रारूप में परिवर्तित करना है (मैंने इसके लिए फ़ंक्शंस बनाए हैं), और अंत में स्कोर परिवर्तनीय मुझे प्राप्त करने के लिए संदर्भ तालिका में शामिल होने के लिए इस रूपांतरित संस्करण का उपयोग करें। तो मूल रूप से: इस चयन

insert into MY_TABLE (select score from REF where conversion_func(MY_CURSOR.total_emps) = REF.total_emps) 

के माध्यम से

select id, total_empts, bank from COMPANIES where turnover > 100000 

पाश यह मूलतः मैं क्या करने के लिए देख रहा हूँ। यह थोड़ा और जटिल है, लेकिन मैं बस मूल बातें ढूंढ रहा हूं और मुझे शुरू करने के लिए कैसे पहुंचना है!

उत्तर

11

यहाँ बुनियादी वाक्य रचना है कर्सर PL/SQL में लूप के लिए:

BEGIN 

    FOR r_company IN (
     SELECT 
      ID, 
      total_emps, 
      bank 
     FROM 
      companies 
     WHERE 
      turnover > 100000 
    ) LOOP 

     INSERT INTO 
      my_table 
     SELECT 
      score 
     FROM 
      ref_table 
     WHERE 
      ref.total_emps = conversion_func(r_company.total_emps) 
     ; 

    END LOOP; 

END; 
/
3

ऐसा करने के लिए PL/SQL का उपयोग करने की जरूरत नहीं है: यदि आप ऐसा करना चाहते हैं तो

insert into my_table 
select score 
    from ref r 
    join companies c 
    on r.total_emps on conversion_func(c.total_emps) 
where c.turnover > 100000 

एक पीएल/एसक्यूएल पाश में पूछे जाने पर, तो मैं सुनिश्चित करता हूं कि आप जितना संभव हो उतना कम काम करें। हालांकि, मैं लूप के बजाय bulk collect की अनुशंसा करता हूं।

begin 

    for xx in (select conversion_func(total_emps) as tot_emp 
       from companies 
       where turnover > 100000) loop 

     insert into my_table 
     select score 
     from ref 
     where total_emps = xx.tot_emp 
      ; 

    end loop; 

end; 
/

किसी भी विधि के लिए आप companies.turnover

पर ref.total_emps पर एक सूचकांक और अच्छा होगा यदि एक की आवश्यकता