आपके मामले के लिए, भाग का उपयोग करने की आवश्यकता नहीं है:
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