我想更新觸發觸發器的相同記錄。我已經使用「BEFORE INSERT」 選項完成了該操作。但請注意,如果存在任何錯誤,我使用事務來回滾操作。更新觸發觸發器的相同記錄
CREATE OR REPLACE TRIGGER GANUKA.INTF_CONTROLLER_UPLOADER
BEFORE insert ON GANUKA.INTF_CONTROLLER for each row
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
max_id INTEGER;
stat VARCHAR2(32);
begin
select :new.id into max_id from dual;
select :new.status into stat from dual;
IF STAT = 'NEW' THEN --ONLY NEW UPLOADS WILL CONTINUE FOR PROCESS
:NEW.STATUS := 'STARTED';
max_id := GANUKA.BACKOFFICE_UPDATE(max_id); --PL/SQL function
:NEW.STATUS := 'COMPLETED';
ELSE
:NEW.STATUS := 'ABORTED';
:NEW.REMARKS :='STATUS IS NOT RECONGNIZED';
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
RAISE;
end;
/
問題是如果有任何異常我想更新記錄以將狀態設置爲'失敗'。任何人都可以告訴我該怎麼做。
爲什麼不是'GANUKA.BACKOFFICE_UPDATE()'函數狀態設置爲'STARTED',然後是'COMPLETED'或'FAILED'爲合適?這可能是一個'AFTER INSERT'觸發器,只是調用'NEW'記錄的函數。 (事實上,無論如何,「STARTED」狀態從來都不會出現)。我想你可能會遇到更新同一記錄的鎖定問題。 – 2010-10-29 11:52:27
據我所知,我們不能使用'AFTER INSERT'選項並使用'NEW'關鍵字更新相同的記錄。這是我的問題。有沒有辦法使用「AFTER INSERT」並更新相同的記錄? – nath 2010-10-29 12:08:52
我只是不認爲觸發器是正確的方式來做到這一點。爲什麼不寫一個PL/SQL過程? – 2010-10-29 12:36:30