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

Oracle Discussion :

Sql*loader ou utl_file ??


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut Sql*loader ou utl_file ??
    Bonjour,

    dsl mais j'ai du mal à comprendre dans quel cas il vaut mieux utiliser le package utl_file plutôt que sql*loader pour insérer les données d'un fichier texte dans une BD oracle...je crois qu'il y a une histoire de serveur et de procédures stockées ??

    J'ai cru comprendre que c'était plus rapide avec slq*loader alors pourquoi utl_file existe ??

    Cela dépend t-il des versions d'oracle ??

    Merci

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    SQL*Loader est un utilitaire qui peut être lancé depuis un poste client qui contient cet utilitaire alors que utl_file est une procédure stockée exécuté depuis SQL*Plus. Mais surtout SQL*Loader se sert d'un fichier de contrôle pour insérer les lignes automatiquements alors que utl_file nécessite de développer la solution.

    Les tables externes est un melange des deux

  3. #3
    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
    Points : 3 609
    Points
    3 609
    Par défaut
    Les 2 choses n'ont pas grand chose à voir.

    - SQL*Loader est un exécutable qui permet d'insérer des données dans une base oracle.
    Pour plus d'informations sur SQL*Loader :
    http://jaouad.developpez.com/sqlldr/

    - UTL_FILE est un package oracle qui permet de lire et d'écrire dans des fichiers texte (et binaire depuis la 10g)
    Il est évident que si tu peux lire des fichiers textes, tu peux écrire une procédure qui va découper ton fichier et insérer les données dans la base.
    Pour plus d'informations sur UTL_FILE :
    http://sheikyerbouti.developpez.com/...?page=Chap8#L8
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    ok merci, donc si le serveur unix lance des procédures stockées automatiquement, et que le client est windows alors il faut utiliser utl_file ??

  5. #5
    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
    Points : 3 609
    Points
    3 609
    Par défaut
    A mon avis, le choix ne joue pas sur ce critère, puisque tu peux très bien lancer un exécutable depuis une procédure PL. A mon avis, il faut plus réfléchir sur la volumétrie pour choisir l'un ou l'autre, voire sur les spécificités de ton fichier (dans une procédure PL utilisant utl_file, tu pourras "retoucher" tes données sans passer par une table de correspondance, par exemple).

    Dans ton cas la solution passe peut-être pas les tables externes, mais là on n'a pas assez d'informations pour t'aider.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    ok merci.

    Dans mon cas, je dois alimenter plusieurs tables et "structurer" les données.
    J'ai cru comprendre qu'avec SQL*Loader on pouvais très bien alimenter plusieurs tables mais sans pouvoir (???) modifier les données et que la solution serait de passer par des tables externes. Or je suis sous la version 8i, donc je crois que ces tables externes n'existent pas ??

    --> au final j'ai compris que SQL*Loader était + rapide mais que dans mon cas (shéma relationel complexe, besoin de modifier les données et version 8i) il vaudrait mieux utiliser UTL_FILE quite à coder la partie qui structurera mes données...

    ...en revanche si j'étais sous 9i, ce serait mieux de faire tables externes + SQL*Loader.

    êtes-vous d'accord avec ça ??

    Merci en tout cas d'avoir pris le temps de m'aider

  7. #7
    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
    Points : 3 609
    Points
    3 609
    Par défaut
    Pas complètement

    Avec SQL*Loader, pour modifier les données tu as plusieurs choix possibles :
    - insérer tes fichiers dans des tables temporaires, puis utiliser une procédure qui va "corriger" ses données et te les insérer dans tes tables définitives.
    - si la modification à apporter est simple, tu peux écrire une fonction que tu appelles dans le fichier de contrôle

    Pour moi UTL_FILE est surtout intéressant dans les cas suivant :
    - quand on ne connait pas SQL*Loader
    - quand on veut pouvoir réutiliser le code ailleurs
    - pour des petits volumes de données

    Par ailleurs, si tu utilises les tables externes, tu n'as pas besoin de SQL*Loader, puisque c'est une vision sous forme de table de ton fichier.
    Là où tu as raison, c'est qu'elles ne sont disponibles qu'à partir de la 9i.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    ah ben ça va j'ai au moins un truc de juste

    merci t'as droit à un "résolu" tiens !!

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

Discussions similaires

  1. équivalent SQL*Loader pour FB / IB
    Par djeant dans le forum Outils
    Réponses: 9
    Dernier message: 10/01/2005, 21h26
  2. Chargement de fichier par SQL LOADER
    Par davy.g dans le forum SQL*Loader
    Réponses: 17
    Dernier message: 15/11/2004, 13h08
  3. SQL LOADER
    Par velo83 dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 25/10/2004, 08h24
  4. Réponses: 4
    Dernier message: 10/06/2004, 18h05
  5. erreur sql loader et performance
    Par mobisky dans le forum SQL*Loader
    Réponses: 14
    Dernier message: 20/08/2003, 12h27

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