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 :

[SQL*LOADER] Import dans plusieurs tables avec contraintes


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [SQL*LOADER] Import dans plusieurs tables avec contraintes
    Bonjour,
    Je m'excuse d'avance si ce sujet a déjà été traité, mais je n'ai pas trouvé de réponse exacte à mon problème.
    Je souhaite charger un fichier à plat au format CSV dans une base Oracle 9i.
    J'ai du mal a écrire mon fichier de contrôle pour mener à bien cette opération car j'ai une contrainte qui est la suivante :
    Mon fichier à plat contient 28 colonnes, dont l'ordre ne peut pas être changé.
    Les 20 premières colonnes doivent aller dans une table, pour cela pas de problème.
    Par contre, les 2 premières colonnes et les 8 dernières doivent aller dans une 2ème table.
    Je voudrais faire cette opération avec un seul fichier d'import (CSV) et un seul fichier de contrôle (CTL) pour SQL*LOADER.
    J'ai essayé avec 2 clauses "into" dans le fichier de contrôle mais sans succès car je ne sais pas comment "aiguiller/dupliquer" correctement les 2 premières colonnes + les 8 dernières dans la 2ème table... car il n'existe pas de "mapping" avec SQL*LOADER (enfin à ma connaissance).
    J'ai réussi en trichant : Dupliquer les 2 premières colonnes en question avant les 8 dernières dans le fichier, mais ce n'est pas bon parce que dans les faits je ne pourrai pas changer la structure du fichier d'import, j'ai fait cela juste pour tester...
    Autre contrainte de taille, je ne peux pas utiliser l'option POSITION, car mes champs peuvent être amenés à changer dans le temps donc pas question d'utiliser le format fixe, j'ai un séparateur point-virgule dans mon fichier à plat et je dois m'en contenter.
    Toute aide sur la question est la bienvenue.
    Je vous en remercie d 'avance.

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    tu trouveras la réponce à ton problème sur le lien suivant:

    http://jaouad.developpez.com/sqlldr/

    V-D. Comment charger les mêmes données dans plusieurs tables
    Ici on va séparer les enregistrements des fichiers dans deux tables différentes :
    Les nom dans la table dvp_loader et les salaires dans la table dvp2_loader.
    Changer le fichier de contrôle :


    LOAD DATA INFILE 'data.csv'
    INTO TABLE DVP_LOADER
    FIELDS TERMINATED BY ';'
    (
    NOM
    )
    INTO TABLE DVP2_LOADER
    FIELDS TERMINATED BY ';'
    TRAILING NULLCOLS
    (

    b
    )
    Lancer la commande.
    Le résultat :


    SQL> select * from dvp_loader ;

    NOM SALAIRE
    -------------------- ----------
    Jaouad
    orafrance
    léoanderson
    bouyao
    Nuke_y
    sheikyerbouti
    pomalaix
    titides
    aline
    denisys
    niourk

    11 ligne(s) sélectionnée(s).

    SQL> select * from dvp2_loader ;

    A B
    -------------------- ----------
    100
    200
    300
    400
    500
    600
    700
    800
    900
    1000
    1100

    11 ligne(s) sélectionnée(s).


    J'espere que c'est ce que tu cherche
    Bonne journée

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre réponse rapide.

    J'avais déjà consulté le tutoriel de Jaouad, qui est très bien expliqué d'ailleurs.

    Mais le fait est que l'exemple proposé ne dit pas comment faire en sorte qu'une seule et même colonne du fichier à plat soit injectée dans 2 tables différentes, sans que cette donnée ne soit dupliquée dans le fichier d'import.

    Sur l'exemple proposé, il n'est pas expliqué comment il serait possible de mettre les NOMS dans la première ET la deuxième table, et les SALAIRES seulement sur la deuxième, et c'est plutôt cela que je cherche à faire dans mon cas.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Le problème est réglé, Jaouad m'a dit qu'il est impossible d'effectuer ce que je veux faire...
    Dommage mais au moins je suis fixé!
    @+

  5. #5
    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
    Utilisez une table externe à la place du chargement par SQL Loader et fait les insertions dans l'ordre imposé par les constraints.

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

Discussions similaires

  1. Nombre total d'éléments dans plusieurs tables avec SQL
    Par mistermiss dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/05/2009, 23h23
  2. Réponses: 6
    Dernier message: 19/12/2007, 17h40
  3. Insertion dans plusieurs table avec un index commun
    Par irongomme dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/10/2007, 11h41
  4. [SQL] Une requête dans plusieurs tables
    Par Anduriel dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/12/2005, 16h23
  5. [Debutant]Suppression dans des tables avec contraintes
    Par Roming22 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/10/2004, 17h23

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