Skip to main content

Oracle Merge Statement Delta Detection


The MERGE Syntax by Ajay Nerumati


Delta Detection in Oracle SQL

Delta detection is a common task in every Data Warehouse. It compares new data from a source system with the last versions in the Data Warehouse to find out whether a new version has to be created. There are several ways to implement this in Oracle.

Your source system delivers a full extraction every night, and you have to load only the changed rows into your Core Data Warehouse? You receive incremental loads from another source system every few minutes, but only a few columns are loaded into the Data Warehouse.

In all these situations, you need a delta detection mechanism to identify the rows that have to be inserted or updated in your Data Warehouse tables. In this blog post, I want to show different methods in Oracle SQL that provide the subset of rows of a source table that were changed since the last load. All these methods are set-based, i.e. they can be executed in one SQL statement.


Merge is used to conditionally insert or update a table .

To understand the merge statement we will use two tables DEPT and DEPT_COPY. The objective being that we load data from DEPT table conditionally into DEPT_COPY .

Step 1  Preparing DEPT and DETP_COPY tables

Based on a much familiar table DEPT that has 4 records, a new table DEPT_COPY with no records  is created using the following syntax .
create table dept_copy as select * from dept where 1=2 ;
Check if the table "DEPT_COPY" is empty and without any records using the following syntax.
Select * from DEPT_COPY;

Step 2  Understanding the Merge Syntax before implementation

INTO  clause specifies the target table you are updating or inserting into.
USING clause identifies the source of the data to be updated or inserted; can be a table, view, or subquery
ON clause the condition upon which the MERGE operation either updates or inserts
WHEN MATCHED | WHEN NOT MATCHED instructs the server how to respond to the results of the join condition
  
Step 3 Implementing the Merge Syntax

Execute the following syntax:
MERGE INTO dept_copy c
USING dept d
ON (c.deptno = d.deptno)
WHEN MATCHED THEN
UPDATE SET c.dname = d.dname, c.loc = d.loc
WHEN NOT MATCHED THEN
INSERT VALUES(d.deptno, d.dname, d.loc);

After executing the above command all the data from table "DEPT" is loaded into "DEPT_COPY".
Query the table DEPT_COPY to confirm that it is populated with all the 4 rows from DEPT.

Step 4 Checking for UPDATES on DEPT to reflect in DEPT_COPY

To test the effect of  MERGE command , make modifications to the source table "DEPT" as follows :-
update dept set loc ='HYDERABAD' where deptno =10;
commit;
Re-run the same MERGE command without making any changes.

MERGE INTO dept_copy c
USING dept d
ON (c.deptno = d.deptno)
WHEN MATCHED THEN
UPDATE SET c.dname = d.dname, c.loc = d.loc
WHEN NOT MATCHED THEN
INSERT VALUES(d.deptno,d.dname,d.loc);

Query the target table "DEPT_COPY" to check if the changes for the loc column in the source "DEPT" are reflecting in the target table.
Select * from DEPT_COPY.
you should find all the updates done on source reflecting in the target.

Step 5 Checking for INSERT on DEPT to reflect in DEPT_COPY

Insert the following row into DEPT table and run the merge command.
insert into dept values ( 50, 'Software', 'Mumbai');
commit;
check the insert table in the source by querying
select * from dept;
Re-run the MERGE command without making any changes to check if the record is loaded into DEPT_COPY.

MERGE INTO dept_copy c
USING dept d
ON (c.deptno = d.deptno)
WHEN MATCHED THEN
UPDATE SET c.dname = d.dname, c.loc = d.loc
WHEN NOT MATCHED THEN
INSERT VALUES(d.deptno,d.dname,d.loc);

Query the target table "DEPT_COPY" to check if the changes in the source "DEPT" are reflecting in the target table.
Select * from DEPT_COPY.
You should find any inserts done on source reflecting in the target.

Merge statement,  can update or insert a row conditionally into a table, thus avoiding multiple UPDATE statements. The decision whether to update or insert into the target table is based on a condition in the ON clause.














Comments

Popular posts from this blog

FOREIGN KEY

Pre-requisits : General understanding of integrity constraints. Constrains are used to prevent invalid data into the table. Integrity constrains are business rules enforced on the data in a table. The enforced rules trigger whenever a row is inserted, updated, or deleted from that table and prevent data that does not meet the set rules. FOREIGN KEY :  Establishes and enforces a relationship between two tables or to the same table itself. The foreign key or referential integrity constraint, designates a column or combination of columns as a foreign key and establishes a relationship between a primary key or a unique key in the same table or a different table.  In the example below   Emp_child  table's deptno   has been defined as the foreign key ; it references the deptno column of the Dept_parent table. Implementation: Step 1 Create parent table DEPT_PARENT as follows: Create table DEPT_PARENT ( Deptno n...

RDBMS MINI PROJECT

  Capgemini class room training.   RDBMS MINI PROJECT ( SPRINT ) LIBRARY MANAGEMENT SYSTEM   Table of Contents Serial No. Topic Name Content Page No. 1.   Introduction 1.1 Setup checklist for mini project 3     1.2 Instructions 3 2.   Problem statement   2.1 Objective 4     2.2 Abstract of the project 4     2.3 Functional components of the project 4     2.4 Technology used 5 3.   Implementation in RDBMS LOT 3.1 Guidelines on the functionality to be built 6 4.   Evaluation 4.1 Evaluation 7   ...