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 :

Sql Loader et les variables externes


Sujet :

SQL*Loader Oracle

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut Sql Loader et les variables externes
    Bonjour,

    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
     
    # more MON_FICHIER_DATA.ctl
     
    LOAD DATA
    APPEND
    INTO MA_TABLE
    (
      NOM         POSITION(20:40)       CHAR,
      PRENOM    POSITION(60:80)       CHAR,
      ID                                          INTEGER EXTERNAL,
    )
     
    // Ou la colonne "ID" tient ça valeur a partir d'une variable externe dynamic.
    ...
     
    ET dans mon scipt shell :
    # more load.sh
    ...
    sqlldr DATA=MON_FICHIER_DATA CONTROL=MON_FICHIER_DATA.ctl  
    ...
    Ma question :

    Comment peut on faire passer une valeur (ex : a partir du shell) à la colonne "ID" dans sql loader ?

    Merci

  2. #2
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Non INTEGER EXTERNAL ca veux dire que c'est un nombre "externe"!
    Et que tu laisses sql loader convertir le champs de ton fichier en format connu pas ORACLE (type du champs de TABLE.ID dans ton exemple).

    cf http://www.ift.ulaval.ca/~agamache/p.../SQLloader.pdf page 5

    Tiens voici un doc bien faite http://www.orafaq.com/faqloadr.htm

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    Merci pour votre aide,

    Mais, je voudrais faire passer une valeur a sql loader, pour qu'elle soit loader dans la colonne "ID" de "MA_TABLE" via le script shell ?

  4. #4
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Si c'est une constante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      LOAD DATA
       INFILE *
       INTO TABLE modified_data
       (  rec_no                      "my_db_sequence.nextval",
          region                      CONSTANT '31',
          time_loaded                 "to_char(SYSDATE, 'HH24:MI')",
          data1        POSITION(1:5)  ":data1/100",
          data2        POSITION(6:15) "upper(:data2)",
          data3        POSITION(16:22)"to_date(:data3, 'YYMMDD')"
       )
       BEGINDATA
       11111AAAAAAAAAA991201
       22222BBBBBBBBBB990112

  5. #5
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Citation Envoyé par sygale
    Si c'est une constante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      LOAD DATA
       INFILE *
       INTO TABLE modified_data
       (  rec_no                      "my_db_sequence.nextval",
          region                      CONSTANT '31',
          time_loaded                 "to_char(SYSDATE, 'HH24:MI')",
          data1        POSITION(1:5)  ":data1/100",
          data2        POSITION(6:15) "upper(:data2)",
          data3        POSITION(16:22)"to_date(:data3, 'YYMMDD')"
       )
       BEGINDATA
       11111AAAAAAAAAA991201
       22222BBBBBBBBBB990112
    Quelle genre de valeur veux tu faire passer ?

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    sygale a écrit :

    Quelle genre de valeur veux tu faire passer ?
    une valeur dynamic (change a chaque execution du shell)

  7. #7
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Tente un truc genre
    Appel le shell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /folder/my_shell.sh 123
    le shell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sqlldr DATA=MON_FICHIER_DATA CONTROL=MON_FICHIER_DATA.ctl $1 (ici 123)
    le control.ctl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    # more MON_FICHIER_DATA.ctl
    DEFINE W_ID = &1;
    LOAD DATA
    APPEND
    INTO MA_TABLE
    (
      NOM         POSITION(20:40)       CHAR,
      PRENOM    POSITION(60:80)       CHAR,
      ID                             CONSTANT &W_ID ,
      region                      
    )
    Mais je suis pas sur et j'ai rien sous la main pour tester

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    Erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL*Loader-350: Syntax error at line 1.
    Expecting keyword LOAD, found "DEFINE".
    DEFINE W_ID = &1;
    ^

  9. #9
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    essaie sans le define juste avec
    Mais je serai surpris

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    toujours une erreur,

    Est ce que c'est fesable ?

    si ce n'es pas le cas, je crois qu'il faut changer le fichier contrôle a chaque changement.

  11. #11
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Citation Envoyé par devdev2003
    toujours une erreur,

    Est ce que c'est fesable ?

    si ce n'es pas le cas, je crois qu'il faut changer le fichier contrôle a chaque changement.
    Je pense que les tests ci dessus le prouve malheureusement si non envoi un mp à l'auteur de http://jaouad.developpez.com/sqlldr/ il aura peut être une idée

  12. #12
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    Je pense que les tests ci dessus le prouve malheureusement si non envoi un mp à l'auteur de http://jaouad.developpez.com/sqlldr/ il aura peut être une idée
    c'est une bonne idée.

    Merci

  13. #13
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonsoir ,
    si tu souhaites ajouter le user de la personne qui a fait le chargement n il te suffit de consulter le doc :http://jaouad.developpez.com/sqlldr/#LV-H

    SI c'est une autre valeur, il faut que nous dises ce que tu souhaites charger dans cette requête.

    Cela va être quand même difficile, c'est le probléme de communication d'un outil Oracle et de l'OS.

    Si on arrive à contourner le probléme sous Sql*Plus, c'est un peu plus difficile sous Sql*Loader ( voila pourquoi il nous faut bcp plus de détail )

  14. #14
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    J’ai le même souci, dans mon cas je dois récupère le nom du fiche data (sachant que le nom du fichier change à chaque chargement) pour l’insère.

    Merci d'avance pour votre aide.

Discussions similaires

  1. SQL*Loader et les Varray
    Par Hykary dans le forum SQL*Loader
    Réponses: 0
    Dernier message: 11/10/2012, 18h07
  2. Petite explication sur les variables externes
    Par Ladgalen dans le forum Débuter
    Réponses: 10
    Dernier message: 15/10/2009, 15h41
  3. les variable extern sous linux
    Par sali lala dans le forum Linux
    Réponses: 3
    Dernier message: 03/05/2007, 11h12
  4. SQL*Loader : filtrer les données chargées
    Par gattaca dans le forum Oracle
    Réponses: 2
    Dernier message: 13/07/2006, 10h51
  5. SQL*LOADER rejet les chaines en accents
    Par bilalove dans le forum Oracle
    Réponses: 7
    Dernier message: 24/04/2006, 17h34

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