Oracle
 sql >> Baza danych >  >> RDS >> Oracle

MERGE tabeli, nie rób nic po dopasowaniu

W Twoim przypadku nie musisz używać części:

WHEN MATCHED THEN UPDATE ...

( za pomocą WHEN MATCHED THEN UPDATE SET a.id = a.id jest akceptowane (Oracle nie rzuca), ale nie ma żadnego wpływu, więc takie użycie jest zbędne, ponieważ nie chcesz niczego zmieniać w dopasowanym przypadku. )

Kontynuuj w bieżącej sprawie:

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

Demonstracja



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie tablicy asocjacyjnej na poziomie pakietu w java

  2. Zwracanie wartości kolumny tożsamości po wstawieniu do Oracle

  3. Ciekawy problem z Oracle UNION i ORDER BY

  4. Zrozumienie segmentów Lob (SYS_LOB) w Oracle?

  5. Różnica między SELECT DISTINCT a SELECT UNIQUE