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 :

Procédure PL/SQL qui attribue automatiquement les valeurs d'une variable


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 13
    Points
    13
    Par défaut Procédure PL/SQL qui attribue automatiquement les valeurs d'une variable
    Bonjour à tous,

    J'ai cherché un bon moment sans trouver de réponses qui soit plus ou moins lié a mon problème.

    Voici une table à partir de laquelle , je dois en-tirer une :
    CLIENT(NumCli (NUMERO_CLIENT),NomCli (NOM_CLIENT),cmd (COMMANDE)) ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    NumCli          NomCli   cmd
    1               Jeanne     ArtA
    1               Jeanne     ArtA
    1               Jeanne     ArtB
    2               Paul       ArtA
    2               Paul       ArtC
    3               Benoit     ArtB
    Le but est de donner un numéro de commande (NumCmd) à partir du NumCli.
    Le NumCmd est donc obtenu en concaténant le NumCli correspondant à une séquence.

    La table résultant est donc comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    NumCli          NomCli     Numcmd      cmd
    1               Jeanne        101   ArtA
    1               Jeanne        102   ArtA
    1               Jeanne        103   ArtB
    2               Paul          201   ArtA
    2               Paul          202   ArtC
    3               Benoit        301   ArtB

    Merci de votre aide

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Regardez les fonction de fenêtrage (analytiques). Il y a un tutoriel sur ce site.

  3. #3
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Regardez les fonction de fenêtrage (analytiques). Il y a un tutoriel sur ce site.
    Le lien qui va avec http://lalystar.developpez.com/fonctionsAnalytiques/

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 13
    Points
    13
    Par défaut
    merci pour les liens

    mais j'ai essayé avec ça mais..
    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
    DECLARE
       v_numCli NUMBER; 
       v_NomCli CLIENT.NomCli%TYPE;
       v_cmd CLIENT.cmd%TYPE;
       v_num NUMBER;
       cursor curs IS
                SELECT NumCli,NomCli,cmd
                FROM CLIENT;                     
    BEGIN
        v_num:=1;
        FOR i IN curs
        LOOP    
        DBMS_OUTPUT.PUT_LINE(i.NumCli||','||i.NomCli||','||i.NumCli||v_num||','||i.cmd) ;
        v_num:=v_num+1;   
        END LOOP;
         
    END;
    l'incrémentation ne s'arrete pas à chaque client

  5. #5
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Le PL/SQL ne sert pas à effectuer des requêtes SQL.

    Dans votre cas une simple requête suffit :

    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
    SQL> with tab as ( select 1 NumCli  ,'Jeanne' NomCli  ,'ArtA' cmd from sys.dual union all
      2                select 1         ,'Jeanne'         ,'ArtA'     from sys.dual union all
      3                select 1         ,'Jeanne'         ,'ArtB'     from sys.dual union all
      4                select 2         ,'Paul'           ,'ArtA'     from sys.dual union all
      5                select 2         ,'Paul'           ,'ArtC'     from sys.dual union all
      6                select 3         ,'Benoit'         ,'ArtB'     from sys.dual )
      7  select numcli
      8       , nomcli
      9       , to_char(numcli)||trim(to_char( row_number() over (partition by numcli order by cmd), '09')) numcom
     10       , cmd
     11* from tab
    SQL> /
     
        NUMCLI NOMCLI NUMCOM  CMD
    ---------- ------ ------- ----
             1 Jeanne 101     ArtA
             1 Jeanne 102     ArtA
             1 Jeanne 103     ArtB
             2 Paul   201     ArtA
             2 Paul   202     ArtC
             3 Benoit 301     ArtB

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Une toute petite amélioration à la requête précédente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT numcli
         , nomcli
         , numcli * 100 + row_number() over (partition BY numcli ORDER BY cmd ASC) AS numcom
         , cmd
      FROM tab;

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    numcli * 100 + row_number() over (partition BY numcli ORDER BY cmd ASC) AS numcom
    C’était exactement ce que j’avais dans la tête comme solution

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 13
    Points
    13
    Par défaut
    Merci les amis , ça marche à merveille , j'ai toujours pensé aux boucles pour ce genre de chose alors qu'une ligne sql suffit.

  9. #9
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    chapeau!
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/03/2011, 10h11
  2. SQL qui renvoie pas les valeurs
    Par PIEPLU dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/12/2009, 15h51
  3. [XL-2003] Printer automatiquement les valeurs d'une plage
    Par Djromé dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/08/2009, 22h24
  4. Réponses: 4
    Dernier message: 11/09/2006, 17h58
  5. Réponses: 5
    Dernier message: 16/05/2006, 09h23

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