[英]PL SQL After Delete Trigger Not Inserting Record
我有一個用PL / SQL編寫的觸發器,該觸發器應該將已刪除的記錄插入到另一個表中。
這是觸發器:
CREATE OR REPLACE TRIGGER keepRemoved
AFTER DELETE
ON schema.table
FOR EACH ROW
DECLARE selection_id varchar2(10) := NULL;
BEGIN
/* Check if deleted record already exists in destination table by populating variable with that value. */
BEGIN
SELECT a.primary_key
INTO selection_id
FROM [destinationTable] a
WHERE a.primary_key = :old.removed_key
AND a.condition_value = true
AND a.condition_value2 = 42;
EXCEPTION
WHEN NO_DATA_FOUND THEN
selection_id := NULL;
WHEN OTHERS THEN
selection_id := NULL;
END;
/* If selection_id is null, meaning that value doesn't exist in the destination table, insert deleted record in destination table */
IF selection_id IS NULL THEN
INSERT INTO [destinationTable] a
(a.primary_key,
a.user_id,
a.column2,
...
a.columnN)
VALUES
(:old.removed_key,
SYS_CONTEXT('USERENV','AUTHENTICATED_IDENTITY'),
123,
...
'MoreText')
END IF;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
問題在於,刪除記錄后, destinationTable
不會填充任何內容。
對於上下文,我永遠不會成為刪除記錄的用戶。
您在此處輸入的內容就像是偽代碼,不是真正的代碼,因此我無能為力,但是這是我的建議:
你有錯誤嗎? 然后按照錯誤添加調試信息,然后向dbms_output.put_line寫入一些異常代碼以進行檢查。
確保觸發器與執行DML操作的表相同。
更改觸發器以使用“刪除前”。
檢查目標表中是否存在a.primary_key,否則將不執行插入。
您好,請以其他方式更改邏輯,例如以下使用計數而不是值和空匹配。 同樣,您也不需要計數例外處理。
CREATE OR REPLACE TRIGGER keepRemoved
AFTER DELETE
ON schema.table
FOR EACH ROW
DECLARE
selection_count pls_integer:=0
BEGIN
/* Check if deleted record already exists in destination table by populating variable with that value. */
BEGIN
SELECT count(*)
INTO selection_count
FROM [destinationTable] a
WHERE a.primary_key = :old.removed_key
AND a.condition_value = true
AND a.condition_value2 = 42;
EXCEPTION -- can remove this.
WHEN NO_DATA_FOUND THEN
selection_count := 0;
WHEN OTHERS THEN
selection_count := 1;
END;
/* If selection_id is null, meaning that value doesn't exist in the destination table, insert deleted record in destination table */
IF selection_count = 0 THEN
INSERT INTO [destinationTable] a
(a.primary_key,
a.user_id,
a.column2,
...
a.columnN)
VALUES
(:old.removed_key,
SYS_CONTEXT('USERENV','AUTHENTICATED_IDENTITY'),
123,
...
'MoreText')
END IF;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.