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 :

Importer un fichier csv


Sujet :

Oracle

  1. #1
    Candidat au Club
    Importer un fichier csv
    Bonjour,

    Voici mon problème:

    Je souhaite importer dans une table un fichier csv à l'aide d'une procédure PL/SQL.

    J'ai créé une procédure dans lequel j'ai déclaré en paramètre le chemin et le fichier csv.

    Mon problème est le suivant lorsque je lance la procédure celui-ci me renvoie les erreurs suivantes:
    ORA-29280: chemin de répertoire non valide
    ORA-06512: à "SYS.UTL_FILE", ligne 29
    ORA-06512: à "SYS.UTL_FILE", ligne 448
    Pour récupérer le chemin j’utilise cette méthode:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
       FICHIER_dir :=VARCHAR2(200) := 'D:/Users/Desktop/fichier'; 
        Fichier_in   Varchar2(128) := 'export_utilisateur.csv' ;
     
       Infile := UTL_FILE.Fopen (FICHIER_dir ,Fichier_in,'r');


    D'après ce que j'ai lu sur différents sites je dois créer le répertoire de la manière suivante:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
     CREATE OR REPLACE DIRECTORY AS 'D:/Users/Desktop/fichier';


    le problème est que j'obtiens cette erreur:

    Erreur SQL : ORA-01031: privilèges insuffisants
    01031. 00000 - "insufficient privileges"
    Je n'ai pas les accès nécessaires et ce serait trop long à demander entre les différentes personnes.

    Est-ce qu'il y aurait un moyen d'importer des données depuis un fichier csv avec en passant en paramètre le chemin de mon pc ?

    Merci pour vos réponse,

  2. #2
    Expert Oracle confirmé

    Bonjour,

    Il existe aussi les "tables externes" sous Oracle, mais là encore il te faut un Directory.

    Donc la seule solution qu'il te reste, c'est d'utiliser SQL*Loader. Tu trouveras sur Internet de nombreux articles sur cet utilitaire sqlloader.exe qui fait partie du client Oracle.

  3. #3
    Expert éminent sénior
    Citation Envoyé par rouardg Voir le message
    ...
    Donc la seule solution qu'il te reste, c'est d'utiliser SQL*Loader.
    SQL Developer contient un utilitaire d'import d'un fichier csv.

  4. #4
    Candidat au Club
    Bonjour,

    Merci pour vos réponse,

    Mais, je dois le faire en pl/sql.

    Est-ce que quelqu'un a une idée de comment faire? Peut-être inclure SQL*Loader dans la procédure PL/SQL? si c'est possible, comment le réaliser?

    Merci pour vos réponse,

  5. #5
    Expert Oracle confirmé

    Bonjour,

    Non, SQL*Loader est un utilitaire comme l'est SQL*Plus, et comme le sont les outils d'import /export. On ne peut pas l'appeler en PL/SQL.

    Au final, à un moment il faut arrêter le délire, et que l'on vous donne le droit de créer un Directory Oracle. Et si on ne veut pas, qu'un DBA vous crée ce répertoire et vous le mette à disposition.

    Sinon vous pouvez tourner en rond pendant des lustres:-(

  6. #6
    Expert éminent sénior
    Citation Envoyé par hazemi Voir le message

    ...Mais, je dois le faire en pl/sql.
    Non ça sera une pure pertes de temps.

    Citation Envoyé par hazemi Voir le message
    ...

    Est-ce que quelqu'un a une idée de comment faire? Peut-être inclure SQL*Loader dans la procédure PL/SQL? si c'est possible, comment le réaliser?
    Oracle à ajouter les tables externes précisément pour répondre à ce type de demande. Mais vous retombez sur le même problème de directory.

    Ensuite si vous y tenez vraiment vous pouvez écrire un program dans votre langage préféré qui à partir de votre machine pourrais appeler dans une boucle une procédure PL/SQL qui recevra via un paramètre une chaines des caractères pour qu'ils la découpe en suivant le caractère de séparation et insère tout dans une table.

  7. #7
    Membre expérimenté
    Le package UTL_FILE s'exécute au niveau serveur. il faut tu auras droit d’accès sur le disque serveur.
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

###raw>template_hook.ano_emploi###