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

Oracle Discussion :

Alimentation d'une table : boucle ou tableau?


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 83
    Par défaut Alimentation d'une table : boucle ou tableau?
    Bonjour

    J'ai une table qui contient 2 champs : Id_site et liste. Elle est structurée come cela :
    Id_site lsite
    site1 AA,BB,CC,DD
    site2 EE,FF,GG

    Je veux alimenter une autre table à partir de cette table
    La nouvelle table devra contenir :
    Id_site lsite_new
    site1 AA
    site1 BB
    site1 CC
    site1 DD
    site2 EE
    site2 FF
    site2 GG

    Comment est ce que je peux faire? avec une boucle loop???
    Merci de votre aide

    PS :Oracle 9i

  2. #2
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 88
    Par défaut
    Juste avec ce que j'ai compris, tu peux essayer de faire un INSERT/SELECT
    avec des fonctions pour séparer tes colonnes (SUBSTR par exemple). Pour cela tu n'effectues que la partie SELECT pour tester que cela va bien rentrer dans table d'arrivée avec les données et la structure souhaitée. Ensuite il ne te reste qu'a tester l'ordre complet.

    @+,
    NicK.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 83
    Par défaut
    Nick Holmes,il faut effectivement faire un insert et seclect mais comment je fais pour passer de :
    site1 AA,BB,CC,DD

    à

    site1 AA
    site1 BB
    site1 CC
    site1 DD
    ?

    En faisant
    select case when instr(lsite,',')=0 then lsite
    else substr(lsite,0,instr(lsite,',')-1)
    end
    je récupère :
    site1 AA uniquement!!

    donc je pensais à faire une boucle pour parcourir lsite...mais peut être que ce n'est pas la solution et que je ne prends pas le pb comme il faut...

  4. #4
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Par défaut
    Citation Envoyé par ALLB
    Comment est ce que je peux faire? avec une boucle loop???
    Et bien oui, avec une boucle loop, et même deux en fait.

    La première boucle sur ta première table et affecte liste dans une variable.

    La deuxième boucle sur le contenu de ta variable.
    Et en fonction de celui avec des substr et des instr, tu remplis ta deuxième table.

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 83
    Par défaut
    Citation Envoyé par dyvim
    Et bien oui, avec une boucle loop, et même deux en fait.

    La première boucle sur ta première table et affecte liste dans une variable.

    La deuxième boucle sur le contenu de ta variable.
    Et en fonction de celui avec des substr et des instr, tu remplis ta deuxième table.
    Concrétement, peux tu me dire + précisemment comment faire? cse en faisant un select dans le loop, ca ne fonctionne pas...

  6. #6
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Par défaut
    Ca pourrait donner qqchose comme çà, en faisant un curseur sur ta 1ère table.(ca demande à être mis au point, je n'ai pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    BEGIN
    FOR Row IN SELECT * FROM table1
    LOOP
      nb:= INSTR(Row.liste,',',-1)+1;
      FOR i in 1 .. nb
      DO LOOP
        INSERT INTO table2
        VALUES (Row.id_site,substr(Row.liste,(i-1)*3+1,2);
      END LOOP;
    END LOOP;
    END;
    Ca devrait marcher si tes listes font tous deux caractères et si le INSTR(Row.liste,',',-1)+1 donne bien la position de la dernière virgule (il me semble mais ma mémoire est défaillante à ce sujet)

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/03/2007, 11h47
  2. trier un stringgrid alimenter par une table MySql
    Par boopix dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/03/2007, 14h28
  3. [MySQL] Lister le contenu d'une table dans un tableau HTML
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 03/04/2006, 19h40
  4. Alimentation d'une table de dimension date
    Par kluh dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 01/07/2005, 14h34
  5. alimenter automatiquement une table access
    Par Mickey34 dans le forum Access
    Réponses: 8
    Dernier message: 24/11/2004, 17h55

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