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 ClauseEen 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'); |
|
|