Bonjour

j'ai passé toute la soirée sur ce trigger
C'est mon premier trigger avec curseur et de loin le plus compliqué que j'ai pu construire soyez indulgent.
NB: Je suis sur oracle 10g.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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??