我想更新触发触发器的相同记录。我已经使用“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