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*Loader Oracle Discussion :

Insérer les mêmes valeurs dans plusieurs tables


Sujet :

SQL*Loader Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut Insérer les mêmes valeurs dans plusieurs tables
    Bonjour,
    Je suis débutante en SQL LOADER
    J'ai un fichier .csv, les champs sont séparés par ";"
    Je veux insérer les mêmes champs dans plusieurs tables.
    Par exemple:
    le fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    aa;bbbbbb;0000;cc
    dddd;eee;111;ffffff
    je veux que le premiers champ soit inséré dans Table1, Table2 et Table3
    deuxieme champ dans table1, 3eme champs dans la table2 et 4eme champ dans la table3

  2. #2
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 842
    Points : 983
    Points
    983
    Par défaut
    N'y aurait-t-il pas un problème de schéma relationel à la base de tes données d'entrée ?
    Essaye de voir si une mise à plat pourrait favoriser une meilleure compréhension du problème !

    .
    Diviser c'est régner : United we stand, Divided we fall
    .

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par star Voir le message
    N'y aurait-t-il pas un problème de schéma relationel à la base de tes données d'entrée ?
    Essaye de voir si une mise à plat pourrait favoriser une meilleure compréhension du problème !

    .
    Merci pour ta réponse, euh je pense que tu n'as pas compris ma question je l'ai peut etre mal posés !!!?

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Si j'ai bien compris l'énoncé, il faut utiliser un fichier de contrôle de ce type :

    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
    27
    28
    29
    30
     
    LOAD DATA
    TRUNCATE
    INTO TABLE OWNER.TABLE1_NAME
    FIELDS TERMINATED BY ';'
    TRAILING NULLCOLS
      (CHAMP1,
       CHAMP2,
       CHAMP3 FILLER,
       CHAMP4 FILLER
       )
    INTO TABLE OWNER.TABLE2_NAME
    FIELDS TERMINATED BY ';'
    TRAILING NULLCOLS
      (CHAMP1 POSITION(1),
       CHAMP2 FILLER,
       CHAMP3,
       CHAMP4 FILLER
       )
    INTO TABLE OWNER.TABLE3_NAME
    FIELDS TERMINATED BY ';'
    TRAILING NULLCOLS
      (CHAMP1 POSITION(1),
       CHAMP2 FILLER,
       CHAMP3 FILLER,
       CHAMP4
       )
     
    --FILLER : Indique que le champ n'est pas à charger
    --POSITION(1) : Indique qu'il faut reprendre au début de l'enregistrement

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Merci AntoineAnge, c'est une solution mais je ne peux pas l'appliquer j'ai un fichier de donnée de 187 lignes et 610 colonnes

    J'ai essayé avec BOUNDFILLER mais ça ne marche pas quand je change de table. Quand je fais ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    INTO TABLE OWNER.TABLE1_NAME
    FIELDS TERMINATED BY ';'
    TRAILING NULLCOLS
      (val BOUNDFILLER
      .....
       )
    INTO TABLE OWNER.TABLE2_NAME
    FIELDS TERMINATED BY ';'
    TRAILING NULLCOLS
      (CHAMP1 :val   
       ...
       )
    il ne reconnait pas val

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Le paramètre BOUNDFILLER permet de ne pas charger un champ et d'indiquer que son contenu sera utilisé pour alimenter une colonne suivante.
    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    LOAD DATA
    TRUNCATE
    INTO TABLE OWNER.TABLE_NAME
    FIELDS TERMINATED BY ';'
    TRAILING NULLCOLS
      (
       CHAMP1 BOUNDFILLER,               --Le 1er champ n'est pas chargé
       CHAMP2 ":CHAMP1||:CHAMP2"     --Le 2ème champ est chargé avec
       )                                            --la concaténation des 2 premiers champs
    Quand à votre problème, pouvez-vous me donner plus de détails.
    Je n'arrive pas à comprendre l'incidence du nombre de champs sur la solution proposée.

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Mon fichier de donnée (.csv) contient 187 lignes et 610 colonnes quand je l'ouvre avec Excel, les données doivent etres réparties sur 13 tables: 1 partie de la colonne1 dans la table 1, une partie de la colonne2 dans la table2, une partie de la colonne3 dans la table3 .... ça serait facile s'il ny' avait pas des données communes, mais là ... par exemple la colonne1 (du fichier de données) doit etre ajouté à toutes les tables, la colonne5 à la table 2, 3,4 ... etc...
    Si j'applique votre solution, j'aurai au moins 13 "insert into" (c'est normal puisque j'ai 13 tables) avec au moins 500 "Filler" pour chaque insert into , c'est énorme

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Il vous faut bien décrire pour chaque table la manière dont elle doit être alimentée.
    Vous pouvez procéder en 13 chargements spécifiques à chaque table cible pour diminuer la taille du fichier de contrôle.

    Sauf s'il existe une relation logique entre le choix des champs à charger et la table cible, je n'ai pas d'autre idée.

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Finalement j'ai utilisé une table externe, à partir de celle ci j'ai créé les autres tables avec "create as select" , c'est beaucoup plus simple quand il s'agit d'un cas compliqué comme le mien

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/12/2008, 12h49
  2. Réponses: 7
    Dernier message: 27/08/2008, 17h01
  3. utiliser les mêmes variable dans plusieurs class
    Par hterrolle dans le forum Langage
    Réponses: 2
    Dernier message: 16/11/2007, 21h11
  4. Réponses: 1
    Dernier message: 27/10/2006, 12h17
  5. [MS SQL] Remplacer des valeurs dans plusieurs tables
    Par salmoliv dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/10/2006, 17h31

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