Curseur et trigger complexe (du moins pour moi)
Bonjour
j'ai passé toute la soirée sur ce trigger :calim2:
C'est mon premier trigger avec curseur et de loin le plus compliqué que j'ai pu construire :aie: soyez indulgent.
NB: Je suis sur oracle 10g.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| create or replace trigger TRG_trigger1
AFTER INSERT ON PRODUIT
FOR EACH ROW
DECLARE
/* Le but recherché est de sélectionner les produits ( s'il en existe ) dont le NUM
est supérieur à l'insertion et dont la catégorie num est identique à celle de l'insertion.
J'espère ne pas mettre trompé sur la syntaxe */
CURSOR cur_produit IS
SELECT produitNUM
FROM CONSTITUER
WHERE produitNUM > :new.produitNUM
AND categNUM =
(
SELECT categNUM
FROM CONSTITUER
WHERE :new.produitNUM = produitNUM
);
V_produit CONSTITUER.produitNUM%TYPE;
BEGIN
OPEN cur_produit;
LOOP
FETCH cur_produit INTO V_produit;
IF (cur_produit%FOUND) THEN
/* Si un produit dont l'ID est supérieur et de même catégorie que le produit insérer, alors instruction 1 : */
INSERT INTO OCCURENCE_produit@LIEN_DW
VALUES (:new.OCCVNUM, :new.OOCVDATE, :new.OCCVETAT, :new.produitNUM, 0, 0);
ELSE
/* Sinon aucun produit dont l'ID est supérieur et de même catégorie, alors instruction 2 : */
INSERT INTO OCCURENCE_produit@LIEN_DW
VALUES (:new.OCCVNUM, :new.OOCVDATE, :new.OCCVETAT, :new.produitNUM, 0, 0);
INSERT INTO OCCURENCE_categ@LIEN_DW
VALUES ('', sysdate,0 ,0 ,0);
EXIT;
END IF;
END LOOP;
CLOSE cur_produit;
END; |
Alors chose incroyable, à peine sortie de l'éditeur de code , j’exécute le trigger :aucune erreur !! une première pour moi :p. Mais malheureusement, il ne fait absolument pas ce que je souhaitais :fessee:
Serriez vous pourquoi ??
Un immense merci par avance.
Nb: je précise que malheureusement le but de l'exercice (scolaire) et de faire un gros curseur, sur lequel on applique %FOUND.
EDIT: Je crois comprendre que c'est la définition du curseur qui cloche . L'utilisation de :new n'est ( à priori) pas possible dans la déclaration du curseur, mais je ne vois pas par qu'elle procédé utilisé les substituer??