На всю жизнь я не могу заставить следующий запрос работать ... по сути, это модификация следующего билета: Триггер с оператором Merge в oracle.
CREATE OR REPLACE TRIGGER TABLE_UPDATE
AFTER INSERT OR UPDATE ON DIM_TABLE
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
IF INSERTING OR UPDATING
THEN
MERGE INTO DIM_TABLE T_1
USING( SELECT COL_1, max(VALID_FROM) AS LAST_DATE FROM
DIM_TABLE
GROUP BY COL_1) T_2
ON (T_1. COL_1= T_2. COL_1)
WHEN NOT MATCHED THEN INSERT (T_1. VALID_FROM) VALUES(SYSDATE)
WHEN MATCHED THEN
UPDATE
SET T_1.VALID_UNTIL = T_2.LAST_DATE
WHERE T_1. VALID_UNTIL is null
AND T_1. VALID_FROM <> T_2.LAST_DATE;
COMMIT;
END IF;
END;
Желаемая функциональность: значение вводится в базу данных (COL_1). Если столбец не соответствует, то дата VALID_FROM вводится как sysdate. Если есть совпадение, скрипт должен обновить значение VALID_UNTIL для предыдущей строки (которая до сих пор была нулевой, потому что оставалась действительной).
Постоянно получаю следующие ошибки: превышен тупик и максимальный уровень рекурсий (50)