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

SQL Oracle Discussion :

Sélectionner plusieurs fois la même ligne en fonction d'une colonne


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Sélectionner plusieurs fois la même ligne en fonction d'une colonne
    Bonjour à tous,

    Je cherche à insérer plusieurs fois la même ligne d'une table A vers une Table B en fonction d'une colonne:
    Table A ( NomTable varchar, NombreAction Int ) ; Table B ( NomTable )

    Par exemple si dans la table A on a une ligne avec: NomTable=Clients et NombreAction=5 (sachant que NombreAction varie en fonction de la ligne), j'aimerai que dans la table B on puisse avoir:

    Clients
    Clients
    Clients
    Clients
    Clients

    Voilà j'espère que c'est assez clair,
    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    avril 2013
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : avril 2013
    Messages : 1 976
    Points : 2 469
    Points
    2 469
    Par défaut
    Et si tu faisais une boucle en PL/SQL?

    Ta boucle va de 1 à NombreAction (récupéré via un SELECT) et dans la boucle tu fais un INSERT(nomTable) dans Table2.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Salut Ikebukuro,
    J'suis tout nouveau sur Oracle, et j'ai essayé de bidouiller un peu en PLSQL que je connaissais pas avant la semaine dernière et malheureusement ça ne pardonne pas..
    Si tu peux éclairer ma lanterne sur la structure d'une boucle avec ces tables je t'en serai infiniment reconnaissant !

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    août 2008
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 2 910
    Points : 5 729
    Points
    5 729
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     insert into table_b (NomTable)
     select NomTable
       from table_a
    connect by level <= NombreAction
        and NomTable = prior NomTable                 
        and prior sys_guid() IS NOT NULL ;
    Si NomTable est bien unique, sinon remplacer NomTable par la clé primaire de table_a dans AND NomTable = prior NomTable

  5. #5
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    avril 2013
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : avril 2013
    Messages : 1 976
    Points : 2 469
    Points
    2 469
    Par défaut
    Houla, tu vas le noyer
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    août 2008
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 2 910
    Points : 5 729
    Points
    5 729
    Par défaut
    Un peu de lecture sur le sujet :
    http://pacmann.over-blog.com/article...121532704.html
    https://community.oracle.com/thread/2526535

    Tout d'abord il faut évidemment savoir que CONNECT BY LEVEL est massivement utilisé sur oracle comme générateur de lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> select level
      from dual
    connect by level <= 5;  2    3
     
         LEVEL
    ----------
             1
             2
             3
             4
             5

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci Skuatamad, j'ai bien compris la réponse et ton code qui marche bien. Cependant, j'ai oublié de mentionner que certaines lignes de la table ne comportaient pas d'actions,
    ainsi, est ce que je dois faire connect by level <= NombreModification AND NombreModification>0 ou quelque chose du genre ?

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    août 2008
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 2 910
    Points : 5 729
    Points
    5 729
    Par défaut
    Je pense qu'il suffit de filtrer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select NomTable
      from table_a
     where NombreModification > 0 
    connect by level <= NombreAction
        and NomTable = prior NomTable                 
        and prior sys_guid() IS NOT NULL ;

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Merci beaucoup
    Merci Skuatamad ! J'avais réussi à bidouiller un truc mais c'est encore mieux avec ce code !

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

Discussions similaires

  1. VBA - Dupliquer plusieurs fois la même ligne
    Par Max_Mer dans le forum Excel
    Réponses: 2
    Dernier message: 14/03/2016, 10h17
  2. Suppression de ligne en fonction d'une colonne
    Par PPLILH2008 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/06/2008, 11h43
  3. Supprimer lignes en fonction d'une colonne
    Par eillon dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/12/2007, 12h15
  4. [VB.NET] Appliquer plusieurs fois la même fonction...
    Par MiJack dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/09/2004, 11h52

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