Oracle
 sql >> база данни >  >> RDS >> Oracle

Таблица MERGE, не правете нищо при съвпадение

За вашия случай не е необходимо да използвате частта:

WHEN MATCHED THEN UPDATE ...

( използване на WHEN MATCHED THEN UPDATE SET a.id = a.id се приема (Oracle не хвърля), но няма въздействие, така че такова използване е излишно, защото не искате да променяте нищо за съвпадащия регистър. )

Продължете със следното за текущия случай:

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. Как да импортирате данни в определено таблично пространство

  3. Ключовата дума FROM не е намерена, където се очаква, избор на текст Oracle SQL

  4. Как да разширя десетичните знаци на число до минимум в Oracle PLSQL?

  5. Конфигуриране на пакета UTL_MAIL Предпоставки