pb de if et end loop qui se chevauchent
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:
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
pb de if et end loop qui se chevauchent
Mon problème est que je ne comprends pas pourquoi on me dit qu'ils se chevauchent et si je vous écris c'est que j'ai repris les fin de if plusieurs fois et que çà ne marche pas.
Finalement, il y a peut être un autre mauvais enchaînement que j'ai du mal à voir.
Je n'ai pas pour vocation à attendre passivement qu'on fasse mon travail.
Désolée pour le malentendu!
Nathalie
Re: pb de if et end loop qui se chevauchent
Citation:
Envoyé par harbonne
Mon problème est que je ne comprends pas pourquoi on me dit qu'ils se chevauchent et si je vous écris c'est que j'ai repris les fin de if plusieurs fois et que çà ne marche pas.
Finalement, il y a peut être un autre mauvais enchaînement que j'ai du mal à voir.
Je n'ai pas pour vocation à attendre passivement qu'on fasse mon travail.
Désolée pour le malentendu!
Nathalie
T'as revu ton code combien de fois ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| BEGIN
LOOP
IF rec_commandes.CODE_ETAT!='SO'
THEN
LOOP
IF rec_lignes_commande.CODE_ETAT!='SO'
THEN
IF qte>lignes_commande.QTE_ART
THEN
END IF;
END IF;
END LOOP;
END LOOP;
END; |
Combien de IF et de END IF ?
[resolu]pb de if et end if
Il n' ya plus de pb -Merci à vous