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 :

[11.2] Conditions dans la clause When


Sujet :

SQL*Loader Oracle

  1. #1
    Membre confirmé

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

    Informations forums :
    Inscription : septembre 2004
    Messages : 506
    Points : 495
    Points
    495
    Par défaut [11.2] Conditions dans la clause When
    Bonjour.

    J'ai un fichier à charger, dans lequel les lignes ne contiennent pas toutes les mêmes informations. J'entends par là que pour deux lignes, à la même position, je peux avoir deux champs différents. Du coup, je souhaite charger en utilisant la clause When.
    Jusqu'à présent ça fonctionne car les conditions sont simples. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    .....
    INTO ma_table
    WHEN champ1= '12345' AND champ2 ='AB'
    (col1 position (1) CHAR(5),
     col2 position (6) CHAR(2)
    )
    INTO ma_table
    WHEN champ1= '12345' AND champ2 ='CD'
    (col1 position (1) CHAR(5),
     col3 position (6) CHAR(2)
    )
    ....
    Aujourd'hui, je dois ajouter des conditions du type "AND champ3 NOT IN (série de valeurs)". Mais apparemment, dans cette clause WHEN on ne peut rien mettre à part "AND", "=", "<" et ">". Surtout, on ne peut pas mettre le "OR", ce qui est très problématique...
    Ceci, donc , ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .....
    INTO ma_table
    WHEN champ1= '12345' AND champ2 ='AB' AND (champ3<>'C1' OR champ3<>'C2')
    (col1 position (1) CHAR(5),
     col2 position (6) CHAR(2)
    )
    ....
    Je ne vois pas de solution simple à mettre en oeuvre. La seule que je vois est de faire une table de chargement avec des colonnes dédoublées et de gérer les conditions dans une procédure ensuite, avant d'insérer dans une autre table. C'est très faisable mais je voulais voir si vous n'aviez pas une solution en testant tout dans le ctl.
    Merci.

    Edit: en l'écrivant, je me rends compte que je peux utiliser des BOUNDFILLER, virer la clause WHEN et tout tester avec des variables calculées. Je vais voir ça.

  2. #2
    Membre confirmé

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

    Informations forums :
    Inscription : septembre 2004
    Messages : 506
    Points : 495
    Points
    495
    Par défaut
    Je suis parti avec des BOUNDFILLER. Mais j'ai un nouveau souci.
    Voici le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INTO ma_table
    (bo1 BOUNDFILLER position (1) CHAR(5),
     bo2 BOUNDFILLER position (6) CHAR(2),
     col1 "case when :bo1='toto' then :bo2 else 'tete' end",
     col2 ":col1"
     col3 "case when :col1='titi' then 'tutu' else 'tata' end"
    )
    Dans ce code, les 3 colonnes sont calculées:
    - col1 donne bien le résultat escompté
    - col2 me donne un résultat délirant
    - col3 me ramène null

    Autrement dit, une colonne calculée ne pourrait pas être utilisée dans le ctl...

    Quelqu'un peut-il le confirmer et/ou me donner une solution de contournement? Je vous donnerai la mienne dès que je la trouverai...

    NB: je ne repars pas des BOUNDFILLER pour col2 et col3 car le calcul de col1 est plus complexe que ça, et je ne souhaite pas reporter ce calcul sur toutes les colonnes (y en a un paquet).

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    août 2008
    Messages
    2 893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 2 893
    Points : 5 699
    Points
    5 699
    Par défaut
    Juste au cas où, ne pouvez-vous pas utiliser une table externe à la place de sqlloader ?
    Derrière, il y a plus de flexibilité pour faire des case ou autre.

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. Requêtes avec condition dans la clause where
    Par desmo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/02/2008, 13h36
  3. Réponses: 2
    Dernier message: 30/01/2008, 15h38
  4. Aide rédaction des conditions dans where clause
    Par Pahcixam dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/08/2007, 13h01
  5. 3 conditions dans une clause SELECT
    Par Aurèl90 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 03/11/2005, 16h05

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