Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

MERGE tabel, tidak melakukan apa-apa saat dicocokkan

Untuk kasus Anda, tidak perlu menggunakan bagian:

WHEN MATCHED THEN UPDATE ...

( menggunakan WHEN MATCHED THEN UPDATE SET a.id = a.id diterima (Oracle tidak melemparkan) tetapi tidak berdampak, jadi, penggunaan seperti itu berlebihan, karena Anda tidak ingin mengubah apa pun untuk kasus yang cocok. )

Lanjutkan dengan yang berikut untuk kasus saat ini:

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

Demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan nama prosedur atau fungsi pemanggilan di Oracle PL/SQL

  2. Sertakan nama kolom dalam hasil kueri Oracle SQL?

  3. SQL Server setara dengan fungsi WM_CONCAT

  4. Dengarkan perubahan Oracle Database di .net

  5. Windows tidak dapat menemukan 'http:/.127.0.0.1:%HTTPPORT%/apex/f?p=4950'. Pastikan Anda mengetik nama dengan benar, lalu coba lagi