Bonjour,

J'essaye de mettre à jour des champs d'une table po_distributions_all dans un trigger after insert. Sauf que lors de l'insertion une erreur s'affiche avec objet "Table mutante".

Au niveau de cette table, il y a un trigger(que je ne dois pas modifier) :
CREATE OR REPLACE TRIGGER APPS.PO_DISTRIBUTIONS_T1
before insert on PO_DISTRIBUTIONS_ALL for each row
WHEN (
NEW.REQ_DISTRIBUTION_ID is not null
)
declare
P_ATTRIBUTE_CATEGORY varchar2(30);
P_ATTRIBUTE1 varchar2(150);
P_ATTRIBUTE2 varchar2(150);
P_ATTRIBUTE3 varchar2(150);
P_ATTRIBUTE4 varchar2(150);
P_ATTRIBUTE5 varchar2(150);
P_ATTRIBUTE6 varchar2(150);
P_ATTRIBUTE7 varchar2(150);
P_ATTRIBUTE8 varchar2(150);
P_ATTRIBUTE9 varchar2(150);
P_ATTRIBUTE10 varchar2(150);
P_ATTRIBUTE11 varchar2(150);
P_ATTRIBUTE12 varchar2(150);
P_ATTRIBUTE13 varchar2(150);
P_ATTRIBUTE14 varchar2(150);
P_ATTRIBUTE15 varchar2(150);
begin
select
PR.ATTRIBUTE_CATEGORY,
PR.ATTRIBUTE1,
PR.ATTRIBUTE2,
PR.ATTRIBUTE3,
PR.ATTRIBUTE4,
PR.ATTRIBUTE5,
PR.ATTRIBUTE6,
PR.ATTRIBUTE7,
PR.ATTRIBUTE8,
PR.ATTRIBUTE9,
PR.ATTRIBUTE10,
PR.ATTRIBUTE11,
PR.ATTRIBUTE12,
PR.ATTRIBUTE13,
PR.ATTRIBUTE14,
PR.ATTRIBUTE15
into
P_ATTRIBUTE_CATEGORY,
P_ATTRIBUTE1,
P_ATTRIBUTE2,
P_ATTRIBUTE3,
P_ATTRIBUTE4,
P_ATTRIBUTE5,
P_ATTRIBUTE6,
P_ATTRIBUTE7,
P_ATTRIBUTE8,
P_ATTRIBUTE9,
P_ATTRIBUTE10,
P_ATTRIBUTE11,
P_ATTRIBUTE12,
P_ATTRIBUTE13,
P_ATTRIBUTE14,
P_ATTRIBUTE15
from po_req_distributions_all PR
where pr.distribution_id = :NEW.REQ_DISTRIBUTION_ID;


:NEW.ATTRIBUTE_CATEGORY := P_ATTRIBUTE_CATEGORY;
:NEW.ATTRIBUTE1 := P_ATTRIBUTE1;
:NEW.ATTRIBUTE2 := P_ATTRIBUTE2;
:NEW.ATTRIBUTE3 := P_ATTRIBUTE3;
:NEW.ATTRIBUTE4 := P_ATTRIBUTE4;
:NEW.ATTRIBUTE5 := P_ATTRIBUTE5;
:NEW.ATTRIBUTE6 := P_ATTRIBUTE6;
:NEW.ATTRIBUTE7 := P_ATTRIBUTE7;
:NEW.ATTRIBUTE8 := P_ATTRIBUTE8;
:NEW.ATTRIBUTE9 := P_ATTRIBUTE9;
:NEW.ATTRIBUTE10 := P_ATTRIBUTE10;
:NEW.ATTRIBUTE11 := P_ATTRIBUTE11;
:NEW.ATTRIBUTE12 := P_ATTRIBUTE12;
:NEW.ATTRIBUTE13 := P_ATTRIBUTE13;
:NEW.ATTRIBUTE14 := P_ATTRIBUTE14;
:NEW.ATTRIBUTE15 := P_ATTRIBUTE15;
exception
when OTHERS then null;
end;
/
Ce que je veux faire c'est de mettre ces mêmes champs de cette table à NULL. Voici mon trigger.


CREATE OR REPLACE TRIGGER MEL_TRG
AFTER
INSERT
ON PO_DISTRIBUTIONS_ALL
FOR EACH ROW

BEGIN
UPDATE PO_DISTRIBUTIONS_ALL
SET ATTRIBUTE5 = NULL
,ATTRIBUTE6 = NULL
,ATTRIBUTE7 = NULL
,ATTRIBUTE9 = NULL
,ATTRIBUTE10 = NULL
,ATTRIBUTE13 = NULL
,ATTRIBUTE14 = NULL
,ATTRIBUTE15 = NULL
WHERE PO_DISTRIBUTION_ID = :NEW.PO_DISTRIBUTION_ID;

IF :NEW.REQ_DISTRIBUTION_ID is not null THEN
UPDATE PO_DISTRIBUTIONS_ALL
SET ATTRIBUTE3 = NULL
,ATTRIBUTE4 = NULL
WHERE PO_DISTRIBUTION_ID = :NEW.PO_DISTRIBUTION_ID;
END IF;

EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20000,SQLERRM);
END;
/
J'ai vu les divers solutions sur ce problème de table de mutation (table temporaire, variables globales), mais je ne peux l'appliquer puisque j'ai pas le droit de modifier le 1er trigger.


Quelqu'un peux m'aider ?

Merci.
Quelqu'un peux m'aider?

Merci.