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:
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.
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; /
Merci à vous.
Nathalie
Partager