I\'m using a function which compares all the columns in Table 1 and Table 2 and returns \'Y\' or \'N\'. Based on that, I will update my Table 1.
But when I run the merge
Chade i tried this Option it didnt throw me any error.
CREATE OR REPLACE PROCEDURE updatetabble1 AS
BEGIN
MERGE
INTO Table1 DBC
USING ( Select ename from
(
Select ename
from
(
Select ename, column1||Column2||Column3 from table1
union
Select ename, column1||Column2||Column3 from table2
)
)
GROUP BY ename HAVING count(*) > 1
) TBL_MAIN
ON ( DBC.empname = TBL_MAIN.empname)
WHEN MATCHED THEN
UPDATE SET DBC.DATA_CHANGED = 'Y';
COMMIT;
END updatetabble1;
You might consider using a temporary table, I.E.:
create global temporary table table12_gt(empname varchar2(30), is_changed char(1));
CREATE OR REPLACE PROCEDURE updatetabble1_2 AS
BEGIN
insert into table12_gt
select empname,
CASE
WHEN count(v) > 1 THEN
'Y'
ELSE
'N'
END is_changed
from (SELECT empname, trim(column1 || column2 || column3) v
FROM table1
UNION
SELECT empname, trim(column1 || column2 || column3) v FROM table2)
GROUP BY empname;
MERGE INTO Table1 DBC
USING (SELECT empname, is_changed as DATA_CHANGED FROM table12_gt) TBL_MAIN
ON (DBC.empname = TBL_MAIN.empname)
WHEN MATCHED THEN
UPDATE SET DBC.DATA_CHANGED = TBL_MAIN.DATA_CHANGED;
COMMIT;
END updatetabble1_2;
This quite "quick and dirty" but can be a start