IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Curseur-Affichage [gestion de commandes]


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 19
    Par défaut Curseur-Affichage [gestion de commandes]
    Bonjour à vous tous ...
    Comme le titre l'indique , mon problème est le faite d'afficher une commande d'un client en suivant le modele suivant :

    Nom de client:
    'Adresse client:
    N° de Commande:
    --------------------------------------------------------------------
    Designation: |Prix Unitaire: |Quantité: |Montant:




    Total Commande:


    et on doit le faire par un curseur.
    voilà la base de donnée :

    Clients( Code,Nom,Adresse,Tel)
    Commande(Ncmd,Date,#Code)
    Produits(Ref,Desig,Pu,Stock)
    L_cmd(#Ncmd,#Ref,Qte)

    j'ai fait un petit bout de code mais ça marche pas :s .. si vous pouvez le rectifier svp !
    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
     
    set serveroutput on;
    declare 
    CURSOR c IS 
    SELECT cl.Nomclt,cl.Adresse,Nmcd.Nmcd,p.Reef,p.Pu,lcmd.Qte,(lcmd.Qte*p.Pu) as 'montant' FROM Clients cl,Commande cmd,llcmd lcmd,Produits p  WHERE cl.Code=cmd.Code AND lcmd.Nmcd=cmd.Ncmd AND p.Reef=lcmd.Reef AND cmd.Nmcd=&n;
    c1 c%rowtype; 
    begin 
    open c;
    DBMS_OUTPUT.PUT_LINE('Nom de client:'||c1.Nomclt||);
    DBMS_OUTPUT.PUT_LINE('Adresse client:'||c1.Adresse||);
    DBMS_OUTPUT.PUT_LINE('N° de Commande:'||c1.Ncmd||); 
    loop
    fetch c into c1;
    DBMS_OUTPUT.PUT_LINE('--------------------------------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('Designation:      |Prix Unitaire:      |Quantité:     |Montant:    ');
    DBMS_OUTPUT.PUT_LINE('*'||c1.Reef||'    |'||c1.Pu||'         |'||c1.Qte||'  |'||c1.montant||);
    exit when c%notfound;
    end loop;
    close c;
    select sum(p.pu*lcmd.qte) as 'tot' from produits p,llcmd lcmd where lcmd.reef=p.reef;
    DBMS_OUTPUT.PUT_LINE(' Total Commande:'||tot||);
    end; 
    /
    ça m'affiche ces erreurs :
    ancien 3 : SELECT cl.Nomclt,cl.Adresse,Nmcd.Nmcd,p.Reef,p.Pu,lcmd.Qte,(lcmd.Qte*p.Pu) as 'montant' FROM Clients cl,Commande cmd,llcmd lcmd,Produits p WHERE cl.Code=cmd.Code AND lcmd.Nmcd=cmd.Ncmd AND p.Reef=lcmd.Reef AND cmd.Nmcd=&n;
    nouveau 3 : SELECT cl.Nomclt,cl.Adresse,Nmcd.Nmcd,p.Reef,p.Pu,lcmd.Qte,(lcmd.Qte*p.Pu) as 'montant' FROM Clients cl,Commande cmd,llcmd lcmd,Produits p WHERE cl.Code=cmd.Code AND lcmd.Nmcd=cmd.Ncmd AND p.Reef=lcmd.Reef AND cmd.Nmcd=100;

    SELECT cl.Nomclt,cl.Adresse,Nmcd.Nmcd,p.Reef,p.Pu,lcmd.Qte,(lcmd.Qte*p.Pu) as 'montant' FROM Clients cl,Commande cmd,llcmd lcmd,Produits p WHERE cl.Code=cmd.Code AND lcmd.Nmcd=cmd.Ncmd AND p.Reef=lcmd.Reef AND cmd.Nmcd=100;
    *

    ERREUR à la ligne 3 :
    ORA-06550: Ligne 3, colonne 79 :
    PL/SQL: ORA-00923: mot-clé FROM absent à l'emplacement prévu
    ORA-06550: Ligne 3, colonne 1 :
    PL/SQL: SQL Statement ignored
    ORA-06550: Ligne 7, colonne 51 :
    PLS-00103: Symbole ")" rencontré à la place d'un des symboles suivants :
    ( - + case mod new null <identificateur>
    <identificateur entre guillemets> <variable bind> avg count
    current max min prior sql stddev sum variance execute
    ORA-06550: Ligne 8, colonne 53 :
    PLS-00103: Symbole ")" rencontré à la place d'un des symboles suivants :
    ( - + case mod new null <identificateur>
    <identificateur entre guillemets> <variable bind> avg count
    current max min prior sql stddev sum variance execute
    ORA-06550: Ligne 9, colonne 50 :
    PLS-00103: Symbole ")" rencontré à la place d'un des symboles suivants :
    ( - + case mod new null <identificateur>
    <identificateur entre guillemets> <variable bind> avg count
    current max min prior sql stddev sum variance execute
    ORA-06550: Ligne 14, colonne 93 :
    PLS-0010
    J'ai vraiment besoin de l'aide .. j'ai pas trouvé un exemple de ce type de curseur .. et je dois rendre ce travail dimanche...

    Merci pour votre Temps et votre aide à priori .. :]

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Pour les problèmes de syntaxe, je pense que tu es capable de trouver tout seul

    Il manque au moins un INTO dans ton dernier SELECT. Pour le reste ça semble correcte, faut isoler la ligne qui pose problème pour comprendre d'où vient l'erreur.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 19
    Par défaut
    Rebonjour..
    Premiérement Merci de consacrer un tout petit temps pour lire mon probleme et essayer de me d'aider..
    deuxiement j'ai fais ce que vous m'avez demander :
    Citation Envoyé par orafrance Voir le message
    Il manque au moins un INTO dans ton dernier SELECT. Pour le reste ça semble correcte, faut isoler la ligne qui pose problème pour comprendre d'où vient l'erreur.
    J'ai pas trop compris .. ma dernière requête je l'ai mise en dehors de Curseur , donc c'est une simple requête qui calcule le total ... et l'affiche.. Non ?
    bonjour,
    commence par enlever le quote autour de tes alias de colonne (ex As 'montant')
    Merci cela m'as aider à diminuer les erreurs.. !
    et aussi pour le truc de l'entête ...
    Maintenant en rectifiant tous ça , ça m'affiche quelques erreurs .. :s et ça m'énérve car vraiment je suis pas trop doué et le pire je ne vois aucune connerie de ce que j'ai fais !
    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
     
    SET serveroutput ON;
    declare 
    CURSOR c IS 
    SELECT cl.Nomclt,cl.Adresse,Nmcd.Nmcd,p.Reef,p.Pu,lcmd.Qte,(lcmd.Qte*p.Pu) AS montant FROM Clients cl,Commande cmd,llcmd lcmd,Produits p  WHERE cl.Code=cmd.Code AND lcmd.Nmcd=cmd.Ncmd AND p.Reef=lcmd.Reef AND cmd.Nmcd=&n;
    c1 c%rowtype; 
     
    begin 
    open c;
     
    DBMS_OUTPUT.PUT_LINE('Nom de client: '||c1.Nomclt||);
    DBMS_OUTPUT.PUT_LINE('Adresse client:'||c1.Adresse||);
    DBMS_OUTPUT.PUT_LINE('N° de Commande:'||c1.Ncmd||); 
    DBMS_OUTPUT.PUT_LINE('--------------------------------------------------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('Designation:      |Prix Unitaire:      |Quantité:     |Montant:    ');
    loop
    fetch c INTO c1;
     
    DBMS_OUTPUT.PUT_LINE('*'||c1.Reef||'    |'||c1.Pu||'         |'||c1.Qte||'  |'||c1.montant||);
    exit when c%notfound;
    end loop;
    close c;
    SELECT sum(p.pu*lcmd.qte) AS tot FROM produits p,llcmd lcmd WHERE lcmd.reef=p.reef;
    DBMS_OUTPUT.PUT_LINE(' Total Commande:'||tot||);
    end; 
    /
    Est ce que je dois mettre d'abord le " fetch c INTO c1; " avant d'afficher l'entête ? !!!
    :s voilà les erreurs !
    ancien 3 : SELECT cl.Nomclt,cl.Adresse,Nmcd.Nmcd,p.Reef,p.Pu,lcmd.Qte,(lcmd.Qte*p.Pu) AS montant FROM Clients cl,Commande cmd,llcmd lcmd,Produits p WHERE cl.Code=cmd.Code AND lcmd.Nmcd=cmd.Ncmd AND p.Reef=lcmd.Reef AND cmd.Nmcd=&n;
    nouveau 3 : SELECT cl.Nomclt,cl.Adresse,Nmcd.Nmcd,p.Reef,p.Pu,lcmd.Qte,(lcmd.Qte*p.Pu) AS montant FROM Clients cl,Commande cmd,llcmd lcmd,Produits p WHERE cl.Code=cmd.Code AND lcmd.Nmcd=cmd.Ncmd AND p.Reef=lcmd.Reef AND cmd.Nmcd=100;

    DBMS_OUTPUT.PUT_LINE('Nom de client: '||c2.Nomclt||);
    *

    ERREUR à la ligne 9 :
    ORA-06550: Ligne 9, colonne 52 :
    PLS-00103: Symbole ")" rencontré à la place d'un des symboles suivants :
    ( - + case mod new null <identificateur>
    <identificateur entre guillemets> <variable bind> avg count
    current max min prior sql stddev sum variance execute forall
    merge time timestamp interval date
    <un littéral de chaîne avec spécification de jeu de caractères>
    <un nombre> <une chaîne SQL entre apostrophes> pipe
    <constante de chaîne éventuellement entre guillemets avec indication du jeu de caractères>
    <chaîne S
    ORA-06550: Ligne 10, colonne 53 :
    PLS-00103: Symbole ")" rencontré à la place d'un des symboles suivants :
    ( - + case mod new null <identificateur>
    <identificateur entre guillemets> <variable bind> avg count
    current max min prior sql stddev sum variance execute
    ORA-06550: Ligne 11, colonne 50 :
    PLS-00103: Symbole ")" rencontré à la place d'un des symboles suivants :
    ( - + case mod new null <identificateur>
    <identificateur entre guillemets> <v

    Mercii Encore à vous tous !!
    Nb : Je suis débutant

    citation de Mr orafrance :
    ceci dit, y'a pas besoin de PL/SQL pour faire ça
    Le prof nous a demandé de le faire en PL/SQL .. sinon tu peux s'il te plait me proposer ta solution ? .. ^^'

    Merci d'avance !

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Pas de SELECT sans INTO en PL/SQL

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 19
    Par défaut
    Citation Envoyé par orafrance Voir le message
    Pour les problèmes de syntaxe, je pense que tu es capable de trouver tout seul

    Il manque au moins un INTO dans ton dernier SELECT. Pour le reste ça semble correcte, faut isoler la ligne qui pose problème pour comprendre d'où vient l'erreur.
    Citation Envoyé par orafrance Voir le message
    Pas de SELECT sans INTO en PL/SQL
    Oups j'ai vraiment oublier ça ! ( boulet que je suis )
    Mais bon toujours le même problème .. le problème est en haut !

  6. #6
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 19
    Par défaut Sans curseur..
    Bonjour à tous ..
    J'ai laissé tomber l'idée de curseur , et j'ai travaillé avec une simple Requête PL/SQL ... mais j'ai une erreur que je ne comprend pas !

    voilà mon 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
     
     
    SET serveroutput ON;
    Declare
    n Clients.Nomclt%type; 
    a Clients.Adresse%type; 
    cc Commande.NMCD%type;
    r Produits.Reef%type;
    p Produits.Pu%type; 
    q llcmd.Qte%type;
    k integer;
    j integer;
    begin
    SELECT cl.Nomclt,cl.Adresse,cmd.NMCD,p.Reef,p.Pu,lcmd.Qte,(lcmd.Qte*p.Pu) AS montant  into n,a,cc,r,p,q,k FROM Clients cl,Commande cmd,llcmd lcmd,Produits p  WHERE cl.Code=cmd.Code AND lcmd.Nmcd=cmd.NMCD AND p.Reef=lcmd.Reef AND cmd.Nmcd=&n;
     
    DBMS_OUTPUT.PUT_LINE('Nom de client:'||n);
    DBMS_OUTPUT.PUT_LINE('Adresse client:'||a);
    DBMS_OUTPUT.PUT_LINE('N° de Commande:'||cc); 
     
    DBMS_OUTPUT.PUT_LINE('--------------------------------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('Designation:      |Prix Unitaire:      |Quantité:     |Montant:    ');
    DBMS_OUTPUT.PUT_LINE('*'||r||'    |'||p||'         |'||q||'  |'||k);
    SELECT sum(p.pu*lcmd.qte) AS tot into j FROM produits p,llcmd lcmd WHERE lcmd.reef=p.reef;
    DBMS_OUTPUT.PUT_LINE(' Total Commande:'||j);
    end; 
    /
    et voilà l'erreur .. :
    Declare
    *

    ERREUR à la ligne 1 :
    ORA-01422: l'extraction exacte ramène plus que le nombre de lignes demandé
    ORA-06512: à ligne 11
    Est ce que vous avez une idée ? ... :s
    Merci d'avance !

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    bonjour,
    commence par enlever le quote autour de tes alias de colonne (ex As 'montant')
    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DBMS_OUTPUT.PUT_LINE('--------------------------------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('Designation:      |Prix Unitaire:      |Quantité:     |Montant:    ');
    cette partie devrait être avant le loop , car c'est un entete de corps

    Ensuite relance le tout voir si ca passe

  8. #8
    Membre expérimenté Avatar de mongilotti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2003
    Messages : 314
    Par défaut
    tu dois mettre l'entête des lignes commandes avant la boucle du curseur, sinon elle va être afficher autant de fois que tu as de lignes de commandes.

  9. #9
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ceci dit, y'a pas besoin de PL/SQL pour faire ça

Discussions similaires

  1. [USE CASE] Gestion de commande
    Par ducker88 dans le forum Cas d'utilisation
    Réponses: 9
    Dernier message: 06/02/2007, 09h20
  2. Curseur affichage dynamique
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 26/01/2007, 16h58
  3. Affichage ligne de commande
    Par groumph dans le forum Langage
    Réponses: 3
    Dernier message: 24/01/2007, 16h39
  4. [Conception] Comment améliorer mon application de gestion de commandes ?
    Par etiennegaloup dans le forum Framework .NET
    Réponses: 5
    Dernier message: 09/08/2006, 18h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo