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 :

Charger une valeur issue d'autres colonnes importées sans TRAILING NULLCOLS


Sujet :

SQL*Loader Oracle

  1. #1
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut Charger une valeur issue d'autres colonnes importées sans TRAILING NULLCOLS
    Bonjour,

    J'ai un fichier à charger via SQL*Loader et je ne dois pas accepter les valeurs NULL.
    Je n'ai donc pas mis le TRAILING NULLCOLS.

    Dans la table de destination, j'ai une colonne (Col8) qui doit être renseignée avec la somme des deux colonnes précédentes

    Mon fichier de controle ressemble à cela :
    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
    LOAD DATA INFILE 'fichier.txt'
    TRUNCATE 
    INTO TABLE TABLE
    FIELDS TERMINATED BY ';' 
     ( 
      Col1 CONSTANT 'Constant', 
      Col2 CHAR(24), 
      Col3 BOUNDFILLER, 
      Col4 BOUNDFILLER, 
      Col5 CHAR(2) "to_date(:Col5 || '/' || :Col4|| '/' || :Col3,'DD/MM/YYYY')", 
      Col6 INTEGER EXTERNAL(12), 
      Col7 INTEGER EXTERNAL(12), 
      Col8 "round(:Col6 + :Col7)",
      Col9 "sequence_x.nextval"
     )
    Ceci conduit à l'erreur suivante :

    Enregistrement 1 : Rejeté - Erreur sur tableTABLE, colonne Col8.
    Colonne absente avant fin d'enregis. logique (utiliser TRAILING NULLCOLS)
    En mettant le fameux TRAILING NULLCOLS, l'import fonctionne mais si il me manque des champs ou que j'ai des champs vide, je n'ai plus d'erreur ce que je ne veux pas.

    A priori SQL Loader s'attend à avoir une valeur dans le fichier pour Col8 même si on ne s'en sert pas.
    D'ailleurs si je retire la Col8, j'ai le même problème avec Col9. Je ne comprends pas bien car dans l'exemple de la FAQ sur les séquences il n'y a pas de TRAILING NULLCOLS non plus.

    Merci pour vos suggestions

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Dans votre code, il manque ":" devant "col7" dans ":col6 + col7".

  3. #3
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Merci mais les : y sont bien dans mon fichier de controle non banalisé.
    J'ai pourtant essayé de faire attention en banalisant mes données de ne pas introduire d'erreur de syntaxe mais on n'y échappe pas !

  4. #4
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Bon je n'ai pas vraiment résolu le problème mais je l'ai contourné de façon satisfaisante pour mon utilisation :

    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
    LOAD DATA INFILE 'fichier.txt'
    TRUNCATE 
    INTO TABLE TABLE
    WHEN Col6<>'NULL' AND Col7<>'NULL'
    FIELDS TERMINATED BY ';' 
    TRAILING NULLCOLS
     ( 
      Col1 CONSTANT 'Constant', 
      Col2 CHAR(24), 
      Col3 BOUNDFILLER, 
      Col4 BOUNDFILLER, 
      Col5 CHAR(2) "to_date(:Col5 || '/' || :Col4|| '/' || :Col3,'DD/MM/YYYY')", 
      Col6 INTEGER EXTERNAL(12), 
      Col7 INTEGER EXTERNAL(12), 
      Col8 "round(:Col6 + :Col7)",
      Col9 "SEQUENCE (COUNT, 1)"
     )
    J'ai mis en gras les principaux changement (j'ai aussi changé la séquence, ce qui permettait de la faire fonctionner sans le TRAILING NULLCOLS des fois que ce soit utile à quelqu'un. Bon ce n'est pas tout à fait pareil qu'une séquence mais pour mon cas vu que je réinitialisais la séquence à chaque import cela fonctionne (et mieux d'ailleurs)).

    En gros avec la clause WHEN, ma ligne se fait jeter si mes colonnes 6 et 7 sont vides ou absentes ce qui était mon but (car, ce que j'ignorais, si aucune clause WHEN n'est valide pour une ligne, cette dernière est rejetée)
    Pour les autres colonnes j'ai mis du NOT NULL dans la table (ce qui n'était pas possible pour les 6 et 7).

    Bref si j'ai des champs vides ou absents dans mon fichier, ma ligne est rejetée malgré le TRAILING NULLCOLS ce qui était mon but.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/05/2015, 14h52
  2. Réponses: 4
    Dernier message: 08/11/2014, 11h21
  3. [XL-2007] Récupérer valeurs d'une colonne vers une liste déroulante sur autre colonne d'une nouvelle feuille
    Par redhotchilipeppers dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/07/2014, 17h26
  4. Réponses: 6
    Dernier message: 09/08/2010, 19h52
  5. Réponses: 7
    Dernier message: 17/10/2006, 16h32

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