表 1 と表 2 のすべての列を比較して「Y」または「N」を返す関数を使用しています。それに基づいて、表 1 を更新します。
しかし、merge ステートメントを実行すると、エラーが表示されます。
ORA -04091 -Table1が変異している、トリガー/関数が表示されない場合があります
どうすればこれを修正できますか?
CREATE OR REPLACE function DataChange (in_epmname varchar2) return char is
v_epmname table2.empname%type;
v_DATA_COUNT varchar2(2);
v_DATA_CHANGED char;
begin
SELECT COUNT (*) into v_DATA_COUNT
FROM
(
SELECT trim(column1||column2||column3)
FROM table1
WHERE empname = in_epmname
UNION
SELECT trim(column1||column2||column3)
FROM table2
WHERE empname = in_epmname
);
If (v_DATA_COUNT = '1' ) Then
v_DATA_CHANGED :='N';
else
v_DATA_CHANGED :='Y';
end if;
return v_DATA_CHANGED;
end DataChange ;
私が使用しているマージステートメントは次のとおりです。
CREATE OR REPLACE PROCEDURE updatetabble1 AS
BEGIN
MERGE
INTO Table1 DBC
USING ( SELECT
empname,
DataChange(empname) as DATA_CHANGED
FROM employee
) TBL_MAIN
ON ( DBC.empname = TBL_MAIN.empname )
WHEN MATCHED THEN
UPDATE SET
DBC.DATA_CHANGED = TBL_MAIN.DATA_CHANGED;
COMMIT;
END updatetabble1;