Je souhaite mettre à jour le même enregistrement qui déclenche un déclencheur. Je l'ai fait en utilisant "BEFORE INSERT" option . Mais notez que j'ai utilisé une transaction pour annuler l'opération s'il y a une erreur.mettre à jour le même enregistrement qui déclenche un déclencheur
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;
/
Le problème est qu'il existe une exception quelconque que je veux mettre à jour l'enregistrement pour définir l'état comme 'Échec'. Quelqu'un peut-il me dire comment faire cela.
Pourquoi pas la fonction 'GANUKA.BACKOFFICE_UPDATE()' régler le statut 'route', puis soit' 'ou failed' accompli le, le cas échéant? Cela pourrait alors être un déclencheur 'AFTER INSERT' pour appeler simplement la fonction pour les enregistrements' NEW'. (Comme c'est le cas, le statut 'STARTED' n'est jamais vu nulle part de toute façon). Vous avez peut-être des problèmes de verrouillage mettant à jour le même enregistrement, je suppose. –
Comme je sais que nous ne pouvons pas utiliser l'option 'AFTER INSERT' et mettre à jour le même enregistrement en utilisant le mot-clé 'NEW'. C'est le problème que j'ai. Est-il possible d'utiliser "AFTER INSERT" et de mettre à jour le même enregistrement? – nath
Je ne pense pas qu'un déclencheur est la bonne façon de le faire. Pourquoi ne pas écrire un processus PL/SQL? –