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

MERGE तालिका, मिलान होने पर कुछ न करें

आपके मामले के लिए, भाग का उपयोग करने की आवश्यकता नहीं है:

WHEN MATCHED THEN UPDATE ...

( WHEN MATCHED THEN UPDATE SET a.id = a.id स्वीकार किया जाता है (ओरेकल चोट नहीं करता है) लेकिन इसका कोई प्रभाव नहीं पड़ता है, इसलिए, ऐसा उपयोग बेमानी है, क्योंकि आप मेल खाने वाले मामले के लिए कुछ भी बदलना नहीं चाहते हैं। )

वर्तमान मामले के लिए निम्नलिखित के साथ आगे बढ़ें:

SQL> CREATE TABLE domains( 
                           id          INT, 
                           name        VARCHAR2(50), 
                           code        VARCHAR2(50), 
                           description VARCHAR2(50)
                         );

SQL> INSERT INTO domains VALUES(1,'Domain A','D.A.','This is Domain A');

SQL> MERGE INTO domains A USING 
     (SELECT 2 id, 'Domain A' name, 'D.A.' code, 'This is Domain A' description 
        FROM domains) b
          ON ( a.name = b.name )
        WHEN NOT MATCHED THEN INSERT( a.id, a.name, a.code, a.description ) 
                              VALUES( b.id, b.name, b.code, b.description );

SQL> SELECT * FROM domains;

ID  NAME        CODE    DESCRIPTION
--  --------   -----  ----------------
1   Domain A    D.A.  This is Domain A

SQL> DELETE domains;

SQL> INSERT INTO domains VALUES(1,'Domain A','D.A.','This is Domain A');
-- we're deleting and inserting the same row again

SQL> MERGE INTO domains A USING       
 (SELECT 2 id, 'Domain B' name, 'D.B.' code, 'This is Domain B' description 
    FROM domains) b
      ON ( a.name = b.name )
    WHEN NOT MATCHED THEN INSERT( a.id, a.name, a.code, a.description ) 
                          VALUES( b.id, b.name, b.code, b.description );


SQL> SELECT * FROM domains;

ID  NAME        CODE    DESCRIPTION
--  --------   -----  ----------------
1   Domain A    D.A.  This is Domain A
2   Domain B    D.B.  This is Domain B

डेमो



  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. ORA-04084:इस ट्रिगर प्रकार के लिए नए मान नहीं बदल सकते हैं

  3. कॉल संग्रहीत प्रक्रिया जिसमें अजगर में कॉलप्रोक का उपयोग करके रिकॉर्ड का संग्रह होता है

  4. Postgresql और Oracle:आम सबक्वेरी से कई टेबल अपडेट करें

  5. ओरेकल में एक विशिष्ट कॉलम से रिकॉर्ड प्राप्त करें