Bonjour,

J'ai écrit du code pour traitement de commandes clients mais je reçois le message suivant


symbole LOOP rencontré à la place d'un des symboles suivants :'if'


J'ai essyé de corriger cette erreur mais je en vois plus où çà 'cloche', si j'ose dire.
pourriez vous me dire oùil y a un problème SVP?

Merci beaucoup à vous.

Bien cordialement.
Nathalie

Voici le code:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
 
 
DECLARE
 
/*déclaration du curseur qui récupère les données de la table COMMANDES*/
 
 
	CURSOR curs_commandes is
	select * from commandes;
 
	/*déclaration de l'enregistrament qui récupère les données de chaque ligne de la table commandes( et pas de chaque ligne de la table lignes_commande)*/
 
	rec_commandes  curs_commandes%rowtype;
 
	/*declaration du curseur paramétré qui récupère le contenu de la table lignes_commande pour un numéro de commande donné)*/
 
	CURSOR curs_lignes_commande(no_cde COMMANDES.NUM_CDE%TYPE) IS
	select * from lignes_commande
	where NUM_CDE = no_cde;
 
	/*déclaration de l'enregistrement qui récupère chaque ligne de la table lignes_commande)*/
 
	rec_lignes_commandes  curs_lignes_commande%rowtype;
 
	/*déclaration des variables qui vont récupérer les contenus des champs suivants : QTE_ART, SEUIL et PU de la table STOCK*/
 
	qte STOCK.QTE_ART%TYPE;
 
	seuil STOCK.SEUIL%TYPE;
 
	prixunit STOCK.PU%TYPE;
 
	/*ouverture du curseur curs_commandes pour pouvoir traiter les informations */
 
	BEGIN
		OPEN curs_commandes;
 
	/*insertion de chaque ligne du curseur curs_commandes dans un enregistrement approprié pour permettre traitement*/
	LOOP
		FETCH curs_commandes INTO rec_commandes;
		EXIT WHEN curs_commandes%NOTFOUND;
 
 
		/*si le contenu du champ CODE_ETAT de la commande est !='SO' alors ouverture du curseur qui récupère le contenu de toutes les lignes de commande pour cette commande précise*/
			IF  rec_commandes.CODE_ETAT!='SO'   THEN
			OPEN curs_lignes_commande(rec_commandes.NUM_CDE);
				LOOP
				FETCH curs_lignes_commande INTO rec_lignes_commande;
				exit when curs_lignes_commande%NOTFOUND;
 
		/* si le code_etat de la ligne de commande est !='SO' alors traitement*/
				IF rec_lignes_commande.CODE_ETAT!='SO' THEN					select STOCK.QTE_ART, STOCK.PU,  STOCK.SEUIL INTO qte, prixunit, seuil FROM STOCK where COD_ART= rec_lignes_commande.COD_ART;
 
		/* si la qte en stock pour cet article est supérieure à la quantité demandée dans la ligne de commande, alors prélèvement de la qtité demandée à la qtité en stock et maj du champ QTE_ART dans la table STOCK*/
				IF qte>lignes_commande.QTE_ART then
				update STOCK 
				set QTE_ART=lignes_commandes.QTE_ART where COD_ART=lignes_commandes.COD_ART;
 
		/* une fois la MAJ effectuée, la ligne de commande est soldée pour cet article*/
				update lignes_commande 
				set code_etat='SO' 
				where NUM_CDE=rec_commandes.NUM_CDE and COD_ART = rec_lignes_commandes.COD_ART;
 
			/*MAJ du code_etat dans la table COMMANDES( passe à l'état 'EC') après opération sur une ligne de commandes*/
 
			UPDATE COMMANDES 
			SET CODE_ETAT = 'EC'
			where NUM_CDE=curs_commandes.NUM_CDE and CODE_ETAT='AT'; 
 
 
 
			END IF; 
 
			END IF;
 
			END LOOP;
 
	END LOOP;
 
 
	END;
/
Je suis désolée pour le sauts à la ligne mais en faisant un copier -coller il est difficile d'obtenir une plus jolis présentation.
Merci à vous.
Nathalie