Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/03/2011, 18h21   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 24
Points : 1
Points : 1
Par défaut ora 00984 curseur?

Bonjour, avant tout je tiens à dire que j'ai déjà visité les précédents forums qui parlent du sujet mais je n'ai pas réussi à trouver l'erreur.Alors je sollicite juste un peu d'aide pour que mon trigger compile comme il faut.

Voici mon code :
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
38
39
40
41
 
CREATE OR REPLACE TRIGGER MAJ_INVENTORY
AFTER UPDATE OR INSERT ON S_ITEM
FOR EACH ROW
DECLARE
 
	CURSOR C1 IS 
	SELECT * FROM S_INVENTORY WHERE PRODUCT_ID = :NEW.PRODUCT_ID 
	AND WAREHOUSE_ID IN ( SELECT ID FROM S_WAREHOUSE WHERE REGION_ID IN (SELECT DISTINCT REGION_ID FROM S_CUSTOMER))
	ORDER BY AMOUNT_IN_STOCK DESC 
	FOR UPDATE OF AMOUNT_IN_STOCK nowait; 
 
	INVENT C1%ROWTYPE;
	QUANT NUMBER(9) := :NEW.QUANTITY;
	temp number;
BEGIN
	OPEN C1;
		LOOP FETCH C1 INTO INVENT;
 
		EXIT WHEN QUANT = 0 OR C1%NOTFOUND; 
 
			IF (INVENT.AMOUNT_IN_STOCK - QUANT) > INVENT.REORDER_POINT THEN 
			UPDATE S_INVENTORY SET AMOUNT_IN_STOCK = AMOUNT_IN_STOCK - QUANT WHERE CURRENT OF C1;
			QUANT := 0;
 
			ELSIF (INVENT.AMOUNT_IN_STOCK - QUANT) < INVENT.REORDER_POINT AND (INVENT.AMOUNT_IN_STOCK - QUANT) > 0 THEN 
			QUANT := QUANT - INVENT.AMOUNT_IN_STOCK;
			UPDATE S_INVENTORY SET AMOUNT_IN_STOCK = 0 WHERE CURRENT OF C1;
			INSERT INTO REAPPRO VALUES(PRODUCT_ID, WAREHOUSE_ID, MAX_IN_STOCK,TO_DATE(SYSDATE,'DD/MM/RR'),NULL);
 
			ELSIF QUANT > INVENT.MAX_IN_STOCK THEN 
			QUANT := QUANT - INVENT.AMOUNT_IN_STOCK;
			UPDATE S_INVENTORY SET AMOUNT_IN_STOCK = 0 WHERE CURRENT OF C1;
			INSERT INTO REAPPRO VALUES(PRODUCT_ID, WAREHOUSE_ID,MAX_IN_STOCK,TO_DATE(SYSDATE,'DD/MM/RR'),NULL);
			END IF;
 
		END LOOP;
	IF QUANT > 0 THEN 
	RAISE_APPLICATION_ERROR(-20001,'Commande trop importante => rupture de stock');END IF;
END;
/
show error :
Code :
1
2
3
4
5
6
7
 
LINE/COL ERROR
-------- -----------------------------------------------------------------
25/4     PL/SQL: SQL Statement ignored
25/57    PL/SQL: ORA-00984: Un nom de colonne n'est pas autorisé ici
30/4     PL/SQL: SQL Statement ignored
30/56    PL/SQL: ORA-00984: Un nom de colonne n'est pas autorisé ici

Merci de votre aide !!
seline est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 19h01   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Je dirai que le problème à lieu au niveau de vos insert, nulle part ne sont déclarées les variables PRODUCT_ID, WAREHOUSE_ID et MAX_IN_STOCK.

Vous ne vouliez pas écrire :NEW.PRODUCT_ID, :NEW.WAREHOUSE_ID et :NEW.MAX_IN_STOCK à la place ?

Au passage, ceci est une erreur :
Code :
TO_DATE(SYSDATE,'DD/MM/RR')
Vous convertissez une date en date, c'est inutile, écrivez juste SYSDATE.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 10h42   #3
Invité de passage
 
Inscription : novembre 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 24
Points : 1
Points : 1
Merci beaucoup, le problème est réglé. C'était une petite erreur toute bête, j'ai même honte d'avoir ouvert un forum pour cela.
seline est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h36.


 
 
 
 
Partenaires

Hébergement Web