Procedure en pl/sql
Résolu
yaobo84
-
yaobo84 Messages postés 91 Date d'inscription Statut Membre Dernière intervention -
yaobo84 Messages postés 91 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
voici ma procedure:
Il me genere cette erreur que je n'arrive pas à corriger.:
voici ma procedure:
show err; CREATE OR REPLACE PROCEDURE imprimer_facture(numcom IN Commandes.num_com%TYPE) IS taux float; -- Variable pour l'affichage de l''entête de la facture numeroclient Clients.num_cli%TYPE; nomclient Clients.nom_cli%TYPE; adresseclient Clients.adress_cli%TYPE; telephoneclient Clients.numtel_cli%TYPE; datecommande Commandes.date_com%TYPE; -- Variables dans MonCurseur pour l'affichage dans la facture numeroproduit Produits.num_pro%TYPE; libelleproduit Produits.lib_pro%TYPE; quantitecommade Ligne_Coms.qte_com%TYPE; prix_unitaire Produits.prix_u%TYPE; prixproduit Produits.prix_u%TYPE; MontantTotal Commandes.mtot_com%TYPE; -- Déclaration du curseur CURSOR MonCurseur IS SELECT* FROM Commandes,Produits,Clients,Ligne_Coms WHERE Commandes.num_com = numcom AND Clients.num_cli = Commandes.num_com AND Ligne_Coms.num_com = Commandes.num_com AND Produits.num_pro = Ligne_Coms.num_pro ORDER BY Produits.num_pro asc;--ligne 28 BEGIN taux:=0.18; -- Pour l'affichage de l'entête de la facture SELECT Clients.num_cli,Clients.nom_cli,Clients.adress_cli,Clients.numtel_cli,Commandes.Mtot_Com,Commandes.date_com INTO numeroclient,nomclient,adresseclient,telephoneclient,MontantTotal,datecommande FROM Commandes,Produits,Clients,Ligne_Coms WHERE Commandes.num_com = numcom AND Clients.num_cli = Commandes.num_com AND Ligne_Coms.num_com = Commandes.num_com AND Produits.num_pro = Ligne_Coms.num_pro; -- Affichage de l'entête de la facture DBMS_OUTPUT.PUT_LINE('Client N° :'||numeroclient); DBMS_OUTPUT.PUT_LINE('Nom :'||nomclient); DBMS_OUTPUT.PUT_LINE('Adresse :'||adresseclient); DBMS_OUTPUT.PUT_LINE('Telephone :'||telephoneclient); DBMS_OUTPUT.PUT_LINE('______________________________________________________________________________________________________________'); -- Affichage du numero et de la date de la commande DBMS_OUTPUT.PUT_LINE('Commande N° :'||numcom); DBMS_OUTPUT.PUT_LINE('Du :'||datecommande); -- Affichage des entêtes concernant les différents produits de la facture DBMS_OUTPUT.PUT_LINE('Prod N° | Libelle | QteCom | Prix Unitaire | Prix Prod | TVA '); OPEN MonCurseur; -- FETCH MonCurseur INTO numeroproduit,libelleproduit,quantitecommade,prix_unitaire; --WHILE (MonCurseur%FOUND) LOOP FETCH MonCurseur INTO numeroproduit,libelleproduit,quantitecommade,prix_unitaire; prixproduit:=quantitecommade*(prix_unitaire + taux); -- Calcul du prix du produit DBMS_OUTPUT.PUT_LINE(numeroproduit||'--'||libelleproduit||'--'||quantitecommade||'--'||prix_unitaire||'--'||prixproduit||'--'||taux); END LOOP; CLOSE MonCurseur; DBMS_OUTPUT.PUT_LINE('MONTANT TOTAL :'|| MontantTotal ||'FCFA'); END ;
Il me genere cette erreur que je n'arrive pas à corriger.:
LINE/COL ERROR 60/11 PL/SQL: SQL Statement ignored 60/11 PLS-00394: nombre de valeurs erroné dans liste INTO d'une instruc tion FETCHSOS
A voir également:
- Procedure en pl/sql
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Requête sql pix - Forum Python
- Procédure de frigo vide ✓ - Forum Consommation & Internet
- Le point d'entree de procedure est introuvable kernel32 dll ✓ - Forum Windows
6 réponses
Salut,
Dans ton fecth tu as 4 champs alors que dans le select il y a * qui ramène tous les champs de toutes les tables (ce qui n'a pas de sens).
SELECT* FROM Commandes,Produits,Clients,Ligne_Coms
Il faut remplacer * par la liste des champs.
cdlt
Dans ton fecth tu as 4 champs alors que dans le select il y a * qui ramène tous les champs de toutes les tables (ce qui n'a pas de sens).
SELECT* FROM Commandes,Produits,Clients,Ligne_Coms
Il faut remplacer * par la liste des champs.
cdlt
Merci le nouveau code est le suivant:
Il n'y a plus d'erreur mais
exec imprimer_facture(00001) mde donne ceci:
show err; CREATE OR REPLACE PROCEDURE imprimer_facture(numcom IN Commandes.num_com%TYPE) IS taux float; -- Variable pour l'affichage de l''entête de la facture numeroclient Clients.num_cli%TYPE; nomclient Clients.nom_cli%TYPE; adresseclient Clients.adress_cli%TYPE; telephoneclient Clients.numtel_cli%TYPE; datecommande Commandes.date_com%TYPE; -- Variables dans MonCurseur pour l'affichage dans la facture numeroproduit Produits.num_pro%TYPE; libelleproduit Produits.lib_pro%TYPE; quantitecommade Ligne_Coms.qte_com%TYPE; prix_unitaire Produits.prix_u%TYPE; prixproduit Produits.prix_u%TYPE; MontantTotal Commandes.mtot_com%TYPE; -- Déclaration du curseur CURSOR MonCurseur IS SELECT Produits.num_pro,Produits.lib_pro,Ligne_Coms.qte_com,Produits.prix_u FROM Commandes,Produits,Clients,Ligne_Coms WHERE Commandes.num_com = numcom AND Clients.num_cli = Commandes.num_com AND Ligne_Coms.num_com = Commandes.num_com AND Produits.num_pro = Ligne_Coms.num_pro ORDER BY Produits.num_pro asc;--ligne 28 BEGIN taux:=0.18; -- Pour l'affichage de l'entête de la facture SELECT Clients.num_cli,Clients.nom_cli,Clients.adress_cli,Clients.numtel_cli,Commandes.Mtot_Com,Commandes.date_com INTO numeroclient,nomclient,adresseclient,telephoneclient,MontantTotal,datecommande FROM Commandes,Produits,Clients,Ligne_Coms WHERE Commandes.num_com = numcom AND Clients.num_cli = Commandes.num_com AND Ligne_Coms.num_com = Commandes.num_com AND Produits.num_pro = Ligne_Coms.num_pro; -- Affichage de l'entête de la facture DBMS_OUTPUT.PUT_LINE('Client N° :'||numeroclient); DBMS_OUTPUT.PUT_LINE('Nom :'||nomclient); DBMS_OUTPUT.PUT_LINE('Adresse :'||adresseclient); DBMS_OUTPUT.PUT_LINE('Telephone :'||telephoneclient); DBMS_OUTPUT.PUT_LINE('______________________________________________________________________________________________________________'); -- Affichage du numero et de la date de la commande DBMS_OUTPUT.PUT_LINE('Commande N° :'||numcom); DBMS_OUTPUT.PUT_LINE('Du :'||datecommande); -- Affichage des entêtes concernant les différents produits de la facture DBMS_OUTPUT.PUT_LINE('Prod N° | Libelle | QteCom | Prix Unitaire | Prix Prod | TVA '); OPEN MonCurseur; FETCH MonCurseur INTO numeroproduit,libelleproduit,quantitecommade,prix_unitaire; WHILE (MonCurseur%FOUND) LOOP FETCH MonCurseur INTO numeroproduit,libelleproduit,quantitecommade,prix_unitaire; prixproduit:=quantitecommade*(prix_unitaire + taux); -- Calcul du prix du produit DBMS_OUTPUT.PUT_LINE(numeroproduit||'--'||libelleproduit||'--'||quantitecommade||'--'||prix_unitaire||'--'||prixproduit||'--'||taux); END LOOP; CLOSE MonCurseur; DBMS_OUTPUT.PUT_LINE('MONTANT TOTAL :'|| MontantTotal ||'FCFA'); END ;
Il n'y a plus d'erreur mais
exec imprimer_facture(00001) mde donne ceci:
BEGIN imprimer_facture(00004); END; * ERREUR à la ligne 1 : ORA-01422: l'extraction exacte ramène plus que le nombre de lignes demandé ORA-06512: à "JOEL.IMPRIMER_FACTURE", ligne 34 ORA-06512: à ligne 1.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question