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

PL/SQL अद्यतन मान DUP_VAL_ON_INDEX का उपयोग कर रहे हैं

अपडेट के मामले में सभी रिकॉर्ड के माध्यम से लूप करने की कोई आवश्यकता नहीं है। इसलिए आपको अपेक्षित 2 के बजाय 4 अपडेट मिल रहे हैं।

इसके बजाय, आपको केवल DUP_VAL_ON_INDEX . के मामले में ही अपडेट करना चाहिए अपवाद और केवल वह पंक्ति जो अपवाद का कारण बनी।

कुछ इस तरह की कोशिश करो।

DECLARE
    ins NUMBER := 0;
    upd NUMBER := 0;
    CURSOR c1 IS
        SELECT cid
        FROM tbl_cust
        WHERE cid 
        IN ('1','2','3','4');
BEGIN
    FOR rec IN c1 LOOP
        begin 
           INSERT INTO tbl2 (id_tbl2, name_tbl2)
           VALUES(rec.cid, DECODE(rec.cid, '1', 'A',
                                        '2', 'B',
                                        '3', 'C',
                                        '4', 'D'));
           ins := ins + 1;
        EXCEPTION   WHEN DUP_VAL_ON_INDEX THEN
           UPDATE tbl2 set name_tbl2 = DECODE(rec.cid, '1', 'A',
                                        '2', 'B',
                                        '3', 'C',
                                        '4', 'D'));
           WHERE cust_cust_code = rec.cid;
           upd := upd + 1;
           continue; 
         end;    
    END LOOP;
        dbms_output.put_line('Updated: ' || upd);
        dbms_output.put_line('Inserted: ' || ins);
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओरेकल में नियमित उपयोगकर्ता के रूप में dbms_crypto फ़ंक्शन कैसे चलाएं?

  2. गतिविधि का योग

  3. मैं Excel VBA स्क्रिप्ट से Oracle संग्रहीत कार्यविधि को कैसे कॉल करूं?

  4. Oracle खाली स्ट्रिंग्स को NULL मानता है जबकि SQL सर्वर नहीं करता है - यह सबसे अच्छा कैसे संभाला जाता है?

  5. चयन के दौरान शून्य मान को वरीयता कैसे दें