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 :

SQLLOADER: appel à une autre table dans la clause when du CTL


Sujet :

SQL*Loader Oracle

  1. #1
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut SQLLOADER: appel à une autre table dans la clause when du CTL
    Bonjour,

    Je voulais savoir, si dans un fichier de controle (CTL) il était possible d'ajouter dans la clause WHEN un appel à une table existante en base?

    Exemple:
    Ajout collaborateur si ID_Entreprise existe dans la table Entreprise ?

    Si non, quelle alternative?
    Un trigger?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par jamesleouf Voir le message
    Si non, quelle alternative ?
    Vous avez déjà eu la réponse dans un autre sujet, tables externes.

    Vous mappez votre fichier dans une table, après ça se manipule comme n'importe quelle table, vous pouvez faire des requêtes, des insert / updates / merge (dans votre table finale par exemple).

  3. #3
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    Oui, mais pourquoi utiliser une table externe si l'on peut utiliser une table existante.

    Donc on ne peut pas faire appel a une table existante depuis un fichier CTL?

    Une question un peu hors sujet:
    Je ne trouve aucun exemple sur internet concernant une comparaison d'entier dans le When du CTL.

    Exemple:
    si on a trois colonnes (id_colis, type_colis, nom_expediteur)

    faire un
    into table colis
    when type_colis>3

    C'est possible?

    Merci pour la réponse...

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Plutôt que de chercher à réaliser un processus ETL dans votre fichier de contrôle, voyez la table externe comme étant une source de données classique que vous pouvez utiliser partout.
    C'est un simple mapping mais qui vous permet d'utiliser le SQL & PL/SQL, probablement plus complet que les possibilités des fichiers CTL.

    Enfin ce n'est que mon avis !

  5. #5
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    Supposons que j'ai effectivement une table externe, décrite dans un csv quelque part.
    Si le CSV est remplacé chaque jour? Cette table sera mise à jour de la même manière n'est ce pas?

    Est ce mieux d'utiliser une table externe, plutot que d'utiliser un trigger pré insertion pour faire des vérification?

    Avec SQLLoader, est il quand même possible de faire une comparaison d'entier suivant la valeur d'une colonne? je n'ai trouvé que des comparaison que string...

    Merci beaucoup.
    Même si vous dites que ce n'est "que" votre avis, vous semblez bien renseigné

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Si le csv change (il faut qu'il conserve la même structure bien entendu), le contenu de la table changera lorsqu'on fera un select dessus.
    Voyez la table externe comme un moyen de requêter sur votre fichier, ce n'est pas une table finale.

    Pour les comparaisons, je ne sais pas du tout !

  7. #7
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    Re-bonjour,
    j'aurais en fait une question complémentaire.

    En supposant que j'ai 3 fichiers csv, liés à 3 3 tables externes, et que j'ai une vue utilisant ces 3 tables externes.

    Si je comprends bien, en cas de modification des fichiers CSV, les tables externes changeront également (lors d'un select dessus) et donc la vue sera modifiée automatiquement également n'est ce pas?

    Je ne sais pas vraiment quoi penser, mais j'ai comme l'impression qu'un select sur un table externe prendra beaucoup plus de temps qu'un select sur une table externe... non? Les temps d'accès doivent être multipliés par X non?
    Peut on indexer une table externe?
    La table externe est elle visible depuis un outil comme sqlDevelopper?

    En cas d'utilisation d'une vue liée à 3 tables externes qu'en serait il des temps de calculs? Ce ne serait pas exorbitant comparé à une autre solution basée sur des tables physiques?

    (+ par curiosité: si on déclare une table externe, peut on poser des conditions dessus? Par exemple si field3= 'blabla' ? ainsi, même en tant que table externe, un certain écrémage sera fait... Mais encore une fois, meme si ca existe, ca doit bouffer du temps non?)

    Merci beaucoup!

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/05/2010, 16h01
  2. Réponses: 13
    Dernier message: 14/04/2008, 14h30
  3. Modifier une autre table dans un trigger
    Par Mister Nono dans le forum SQL
    Réponses: 4
    Dernier message: 18/09/2007, 12h12
  4. Réponses: 4
    Dernier message: 15/03/2007, 20h32
  5. Réponses: 1
    Dernier message: 20/12/2005, 15h56

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