Procedure en pl/sql
Résolu/Fermé
yaobo84
-
18 nov. 2011 à 01:32
yaobo84 Messages postés 91 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 1 novembre 2012 - 28 nov. 2011 à 01:13
yaobo84 Messages postés 91 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 1 novembre 2012 - 28 nov. 2011 à 01:13
A voir également:
- Procedure en pl/sql
- Le point d'entrée de procédure est introuvable dans la bibliothèque de liens dynamiques ✓ - Forum Logiciels
- Logiciel sql - Télécharger - Bases de données
- Le point d'entrée de procédure eventsetinformation est introuvable advapi32.dll - Forum Windows
- Point d'entrée introuvable - Forum Jeux PC
- Requête sql date supérieure à ✓ - Forum Programmation
6 réponses
jee pee
Messages postés
40647
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
9 janvier 2025
9 482
18 nov. 2011 à 13:40
18 nov. 2011 à 13:40
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
yaobo84
Messages postés
91
Date d'inscription
vendredi 20 février 2009
Statut
Membre
Dernière intervention
1 novembre 2012
1
18 nov. 2011 à 14:59
18 nov. 2011 à 14:59
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.
jee pee
Messages postés
40647
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
9 janvier 2025
9 482
18 nov. 2011 à 15:24
18 nov. 2011 à 15:24
Le select doit ramener n lignes alors que tu n'en attends qu'une.
yaobo84
Messages postés
91
Date d'inscription
vendredi 20 février 2009
Statut
Membre
Dernière intervention
1 novembre 2012
1
19 nov. 2011 à 13:06
19 nov. 2011 à 13:06
Où devrais-je écrire quoi?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jee pee
Messages postés
40647
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
9 janvier 2025
9 482
19 nov. 2011 à 14:04
19 nov. 2011 à 14:04
Surement à cause du produit cartésien sur le select pour l'entête de commande.
Dans le select il ne faut pas associer la table lignes de commande qui fait que le select entête de commande ramène autant de rows que la commande possède de ligne.
Dans le select il ne faut pas associer la table lignes de commande qui fait que le select entête de commande ramène autant de rows que la commande possède de ligne.
yaobo84
Messages postés
91
Date d'inscription
vendredi 20 février 2009
Statut
Membre
Dernière intervention
1 novembre 2012
1
28 nov. 2011 à 01:13
28 nov. 2011 à 01:13
merci!