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 :

[SQLLOADER] probleme clause when


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut [SQLLOADER] probleme clause when
    Bonjour,
    je cherche à utiliser sql loader pour remplir ma base a partir dun fichier csv.
    Mon fichier est de la forme
    ANNEE;val1;val2,val3

    Je dois tester pour mon import que val3 vaux soit BUDGET soit T2 soit une autre valeur.
    le pb est que ma clause when plante a partir du moment ou je met 2 valeur via un "or", mais le "and" fonctionne, si je ne met pas "or rate_type='T2'", ca fonctionne mais ne me renvoie que la moitié des infos)
    Voici ce qui ne fonctionne pas, je m'y prends peut etre mal, mais je ne trouve pas de documentation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    OPTIONS (SKIP=1)
    LOAD DATA
     
    INTO TABLE gen$mis.missasratecsp
    APPEND
    when rate_type='BUDGET' or rate_type='T2'
    FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    ( year_code CHAR,
     currency_code CHAR,
     rate_val FLOAT EXTERNAL "to_number(replace(replace(:rate_val, ',', '.'), ' ', ''), '999999999999999999999999999999D999999', ' NLS_NUMERIC_CHARACTERS = ''. ''')",
    rate_type CHAR
     )
    merci par avance

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Il n'est pas possible de faire de or dans la clause when de SQL*Loader :
    http://download-uk.oracle.com/docs/c...e.htm#i1005657

    Pour ce qui de la doc :
    - officielle :
    vhttp://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14215/part_ldr.htm

    - en français, le tuto de Jaouad :
    http://jaouad.developpez.com/sqlldr/

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    J'ai beau regardé son tuto, et la doc, je ne trouve pas comment faire pour obtenir ce que je souhaite.
    Est ce que quelqu'un n'aurait pas la réponse, je n'arrive pas a enchainer les when comme il faudrait apparement le faire.

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    on a déjà répondu, le OR n'est pas autorisé. Tu peux charger sans clause WHEN et supprimer les lignes où rate_type NOT IN ('BUDGET','T2')

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    Mon pb est que jaimerais que le fait que certaines lignes ne soit pas sauver apparaissent dans les logs, autrement ce ne serai pas vraiment un probleme, je charge mes données dans une table temporaire avant de les mettre dans une autre.
    Je ne maitrise pas lapplication java qui execute tout ca, je modifie juste les fichiers ctl.
    jai essayer de mettre un IN dans le code mais cela ne marche pas.
    Jai essayé denchainer les when comme expliquer dans les liens donné (je vous en remercie dailleurs), mais je dois faire une erreur qq part cela ne marche pas.

    PS: Désolé pour les apostrophes, mais mon firefox lance la recherche des que jappuie sur cette touche.

  6. #6
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Eventuellement tu peux t'en sortir en créant une erreur sur ta colonne. Imaginons que la colonne soit NOT NULL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    LOAD DATA
    INTO TABLE gen$mis.missasratecsp
    APPEND
    FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    ( ...
     rate_type CHAR "decode(:rate_type, 'BUDGET', :rate_type,'T2',:rate_type,NULL)")
     )
    le DECODE permet de mettre la valeur de rate_type si c'est 'BUDGET' ou 'T2' sinon ça met NULL. Comme la colonne est non nulle, la ligne sera rejetée.

    Est-ce clair ?

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par piro
    jai essayer de mettre un IN dans le code mais cela ne marche pas.Jai essayé denchainer les when comme expliquer dans les liens donné (je vous en remercie dailleurs), mais je dois faire une erreur qq part cela ne marche pas.
    voila qui nous aide énormément à comprendre l'erreur

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    J'ai essayé ta derniere methode, le probleme est qu'il me le sauve quand meme, il fait bien le decode mais enregistre en base.
    J'ai essayé en mettant 1 au lieu de null et de mettre une clause when ou je teste si cest different de 1. Il me sauve en base quand meme le champs en ayant bien remplacer la valeur.

  9. #9
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Essaie :
    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
    LOAD DATA
    INTO TABLE gen$mis.missasratecsp
    APPEND
    when rate_type='BUDGET'
    FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    ( year_code CHAR,
     currency_code CHAR,
     rate_val FLOAT EXTERNAL "to_number(replace(replace(:rate_val, ',', '.'), ' ', ''), '999999999999999999999999999999D999999', ' NLS_NUMERIC_CHARACTERS = ''. ''')",
    rate_type CHAR
     )
    INTO TABLE gen$mis.missasratecsp
    APPEND
    when rate_type='T2'
    FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    ( year_code CHAR,
     currency_code CHAR,
     rate_val FLOAT EXTERNAL "to_number(replace(replace(:rate_val, ',', '.'), ' ', ''), '999999999999999999999999999999D999999', ' NLS_NUMERIC_CHARACTERS = ''. ''')",
    rate_type CHAR
     )

  10. #10
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    En fait j'avais déja testé cette methode mais je viens de refaire le test, mais il ne me sauve que celle ayant la première valeur, c'est a dire ici BUDGET

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    Bon, je vous remercie pour votre aide.
    Je vais arrêter mes recherches là, ils n'auront qu'à ne pas se tromper en remplissant les champs.
    Si jamais quelqu'un voit l'erreur, ca peut m'interesser pour ma culture perso sinon c'est pas grave, je ne peux pas me permettre de passer plus de temps là-dessus.

    Encore merci pour votre aide

Discussions similaires

  1. SQLLOADER: appel à une autre table dans la clause when du CTL
    Par jamesleouf dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 28/03/2011, 09h29
  2. SqlLoader et clause WHEN
    Par babylone7 dans le forum SQL*Loader
    Réponses: 19
    Dernier message: 07/07/2009, 10h31
  3. MERGE sans clause WHEN NOT MATCHED
    Par Patmane dans le forum Oracle
    Réponses: 7
    Dernier message: 29/04/2009, 17h02
  4. [sqlloader]problèmes de chargement
    Par ssidki dans le forum Oracle
    Réponses: 6
    Dernier message: 26/07/2006, 18h36
  5. Probleme Clause WHERE
    Par totom dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/07/2006, 11h21

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