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

INSERT के साथ रिटर्निंग का विकल्प... चुनें

आप insert into ... select from . का उपयोग कर रहे हैं निर्माण। तो संभावित रूप से आपका कथन एक से अधिक पंक्तियों को सम्मिलित करेगा, जिसका अर्थ है कि आपका रिटर्निंग क्लॉज एक से अधिक पंक्ति लौटाएगा। नतीजतन, आपको संग्रह . को भरने के लिए बल्क कलेक्ट सिंटैक्स का उपयोग करने की आवश्यकता है नई चाबियों का।

तो हम कुछ इस तरह की कोशिश करते हैं...

declare
    /* NB: define this collection using the appropriate name  */
    type new_keys is table of table_xxx.cola%type;
    col_res new_keys;
begin
    INSERT INTO TBL_XXX
    SELECT COLA * 10, COLB, COLC FROM TBL_YYY
    RETURNING table_xxx.COLA bulk collect INTO COL_RES;
end;
/

... केवल पाने के लिए:

अच्छा यह बेकार है।

दुर्भाग्य से, थोक संग्रह में वापसी करते समय अद्यतनों के साथ काम करता है और इसे हटा देता है यह आवेषण के साथ काम नहीं करता है (या विलय उस पर आता है)। मुझे यकीन है कि Oracle कर्नेल की आंतरिक वास्तुकला में बहुत अच्छे कारण हैं लेकिन यह काम करना चाहिए, और यह सबसे अधिक कष्टप्रद नहीं है।

वैसे भी, जैसा कि @PonderStibbons ने बताया कि एक समाधान है:FORALL निर्माण।

declare
    type new_rows is table of tbl_xxx%rowtype;
    rec_xxx new_rows;
    type new_keys is table of tbl_xxx.cola%type;
    col_xxx new_keys;
begin
    select cola * 10, colb, colc 
    bulk collect into rec_xxx
    from tbl_yyy;

    forall idx in 1 .. rec_xxx.count()
        insert into tbl_xxx
        values rec_xxx(idx)
        returning tbl_xxx.cola bulk collect into col_xxx
    ;

    for idx in 1 .. rec_xxx.count() loop
        dbms_output.put_line('tbl_xxx.cola = ' || col_xxx(idx));
   end loop;
end;
/

यह रहा एक LiveSQL डेमो (मुफ्त OTN लॉगिन आवश्यक) .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. प्रदर्शन और मापनीयता मुद्दों के बिना डेटाबेस गतिविधि का ऑडिट कैसे करें?

  2. हाइबरनेट जेपीए - प्राथमिक कुंजी (अनुक्रम) पर बाधा उल्लंघन अपवाद

  3. Oracle इकाई फ्रेमवर्क प्रदाता DateTime.Now को मिलीसेकंड के साथ संग्रहीत नहीं करता है

  4. क्वेरी परिणाम अपेक्षित रूप से वापस नहीं आया

  5. Oracle से डर्बी - ConnectBy और डर्बी में समकक्ष के साथ प्रारंभ करें