MERGE Statement Enhancements in Oracle Database 10g
Oracle 10g bevat een aantal wijzigingen in het MERGE statement om het een stuk meer flexibel te maken.
  • Optional Clauses
  • Conditional Operations
  • DELETE Clause
Eerst maken we een test tabel aan om te gebruiken in de voorbeelden:
CREATE TABLE test1 AS
SELECT *
FROM all_objects
WHERE 1=2;

Optional Clauses

De MATCHED en NOT MATCHED clauses zijn nu optioneel zodat alle volgende voorbeelden geldig zijn:
-- Beide  clauses aanwezig.
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status
WHEN NOT MATCHED THEN
INSERT (object_id, status)
VALUES (b.object_id, b.status);

-- Geen matched clause, alleen inserts.
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN NOT MATCHED THEN
INSERT (object_id, status)
VALUES (b.object_id, b.status);

-- Geen not-matched clause, aleen update.
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status;

Conditional Operations

Conditional inserts en updates zijn nu mogeljk door gebruik te maken ven een WHERE clause op deze statements.
-- Beide  clauses aanwezig.
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status
WHERE b.status != 'VALID'
WHEN NOT MATCHED THEN
INSERT (object_id, status)
VALUES (b.object_id, b.status)
WHERE b.status != 'VALID';

-- Geen matched clause, alleen inserts.
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN NOT MATCHED THEN
INSERT (object_id, status)
VALUES (b.object_id, b.status)
WHERE b.status != 'VALID';

-- Geen not-matched clause, aleen update.
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status
WHERE b.status != 'VALID';

DELETE Clause

Een optionele DELETE WHERE clause kan gebruikt worden om op te ruimen na een merge operatie. Aleen die rijen die voldoen aan zowel de ON als de DELETE WHERE clause worden verwijderd.
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status
WHERE b.status != 'VALID'
DELETE WHERE (b.status = 'VALID');
 

Advertentie

>

Poll

Voorkeur
 

Wie is er aanwezig

We hebben 157 gasten online