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 :

[11g] Lister les fichiers d'un répertoire à l'aide d'une table externe


Sujet :

Oracle

  1. #1
    Membre régulier Avatar de H.ile
    Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Janvier 2008
    Messages : 122
    Points : 76
    Points
    76
    Par défaut [11g] Lister les fichiers d'un répertoire à l'aide d'une table externe
    Aloha,

    Je souhaite pouvoir lister les fichiers jpg, png et gif, présents dans une arborescence afin de comparaison avec les valeurs d'un champ de plusieurs tables de ma base de données.

    J'ai lu plusieurs article sur cette question puis suis tombé sur deux plus intéressants :
    http://www.oracle-developer.net/display.php?id=513
    et http://www.oracle.com/technetwork/is...da-312277.html

    Aussi ai-je testé ceci, connecté en admin :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    CREATE DIRECTORY xt_dir AS '\\Srvwebsig\apic47data\eau\multimedia';
    CREATE DIRECTORY bin_dir AS '\\Srvwebsig\apic47data\eau\multimedia';
     
    /*GESTION DES DROITS*/
     
    GRANT READ, WRITE ON DIRECTORY xt_dir TO GDU;
    GRANT READ, WRITE ON DIRECTORY bin_dir TO GDU;
     
    /*CREATION D'UNE TABLE EXTERNE*/
     
    CREATE TABLE fichiers_xt
      (date_fichier VARCHAR2(50)
      , heure_fichier VARCHAR2(50)
      , taille_fichier VARCHAR2(50)
      , nom_fichier VARCHAR2(255)
      )
      ORGANIZATION EXTERNAL
      (
        TYPE ORACLE_LOADER
        DEFAULT DIRECTORY xt_dir
        ACCESS PARAMETERS
        (
          RECORDS DELIMITED BY NEWLINE
          LOAD WHEN taille_fichier != '<DIR>'
          PREPROCESSOR bin_dir: 'lister_fichier.bat'
          FIELDS TERMINATED BY WHITESPACE
        )
        LOCATION ('test_liste.txt')
      )
      REJECT LIMIT UNLIMITED;
    Mon fichier lister_fichier.bat contient les lignes suivantes :

    Mais lorsque je fais un select sur ma table externe, j'ai ceci comme erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ERREUR Ó la ligne 1 :
    ORA-29913: erreur d'exÚcution de l'appel ODCIEXTTABLEOPEN
    ORA-29400: erreur de cartouche de donnÚes
    KUP-00554: error encountered while parsing access parameters
    KUP-01005: syntax error: found "identifier": expecting one of: "and, badfile,
    byteordermark, characterset, column, data, delimited, discardfile,
    disable_directory_link_check, exit, fields, fixed, load, logfile, language,
    not, nodiscardfile, nobadfile, nologfile, date_cache, or, processing, readsize,
    string, skip,"
    KUP-01008: the bad identifier was: PREPROCESSOR
    KUP-01007: at line 3 column 7
    ORA-06512: Ó "SYS.ORACLE_LOADER", ligne 19
    Je me pose donc les questions suivantes :
    - pourquoi ces erreurs ?
    - un chemin en '\\srvwesbig\...' est-il compatible avec un DIRECTORY ?
    - peut-on lister les fichiers d'une arborescence présente dans un serveur windows différente du serveur UNIX sur lequel la base Oracle est installée ?
    - est-ce possible de créer des vues construites sur un select de la table fichiers_xt avec en paramètre le nom de la racine de l'arborescence afin de "monitorer" plusieurs arborescences ?

    Merci d'avance, et bonne année 2013, les oracles la prédisent chouette !

    PS. Je ne savais pas s'il fallait déposer cette question dans la section administration.

  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 H.ile Voir le message
    - un chemin en '\\srvwesbig\...' est-il compatible avec un DIRECTORY ?
    - peut-on lister les fichiers d'une arborescence présente dans un serveur windows différente du serveur UNIX sur lequel la base Oracle est installée ?
    Vous avez bien identifié le problème, l'objet DIRECTORY ne supporte pas les chemins réseau : il faut mapper un lecteur vers une partie de votre arborescence.

    CREATE DIRECTORY :
    A directory object specifies an alias for a directory on the server file system where external binary file LOBs (BFILEs) and external table data are located.
    Pour un chemin réseau Windows lu sur Unix, aucune idée ça va dépendre du type de système de fichiers à mon avis.

  3. #3
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par H.ile Voir le message
    Aloha,

    Je souhaite pouvoir lister les fichiers jpg, png et gif, présents dans une arborescence afin de comparaison avec les valeurs d'un champ de plusieurs tables de ma base de données.

    J'ai lu plusieurs article sur cette question puis suis tombé sur deux plus intéressants :
    http://www.oracle-developer.net/display.php?id=513
    et http://www.oracle.com/technetwork/is...da-312277.html

    Aussi ai-je testé ceci, connecté en admin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    CREATE DIRECTORY xt_dir AS '\\Srvwebsig\apic47data\eau\multimedia';
    CREATE DIRECTORY bin_dir AS '\\Srvwebsig\apic47data\eau\multimedia';
    les "Oraclistes" peuvent confirmer ça, d'apres mon experience , Oracle n'accepte pas et il ne reconnait pas un chemin du réseau il ne reconnait que le chemin du serveur où est installé.
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par H.ile Voir le message
    ...
    Je me pose donc les questions suivantes :
    - pourquoi ces erreurs ?
    ...
    Avez-vous testé sur une base Oracle 11gR2 ?

  5. #5
    Membre régulier Avatar de H.ile
    Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Janvier 2008
    Messages : 122
    Points : 76
    Points
    76
    Par défaut
    @Mnitu. J'essaie d'organiser un test avec mon collègue admin.
    Par contre j'ai peur, il semble qu'il me faille devoir développer en 10g et non plus pour une 11, la base de production étant une 10. Donc adieu les tables externes ?

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par H.ile Voir le message
    ...il semble qu'il me faille devoir développer en 10g et non plus pour une 11, la base de production étant une 10. Donc adieu les tables externes ?
    Les tables externes sont disponibles depuis la V9, en revanche les prétraitements (clause PREPROCESSOR) sont une nouveauté de la 11.2.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Votre serveur de base des données doit avoir accès à la machine contenant des fichiers et divers problèmes de sécurité peuvent vous faire la vie difficile.

    Utilisez Dbms_scheduler pour exécuter un script shell qui va générer un fichier contenant la liste des fichiers qui vous intéresse. Utilisez par la suite une table externe pour interroger ce fichier.

    C’est un peu comme dans vos liens mais comme la base 10 ne dispose pas d’un pré-pré processeur vous la remplacez par DBMS_scheduler.

    Voilà un lien qui montre l’idée et les divers problèmes rencontrés (suivez les autres liens aussi).
    Il y a eu une discussition sur ce forum concernant l'utilisation du Dbms_scheduler pour exécuter une tâche externe (de mémoire j'ai galéré un peu pour fournir un exemple).

Discussions similaires

  1. Lister les fichiers d'un répertoire dans une feuille Excel
    Par AlainTech dans le forum Contribuez
    Réponses: 3
    Dernier message: 10/03/2016, 14h14
  2. [C++/Unix] Lister les fichiers d'un répertoire
    Par bouazza92 dans le forum Linux
    Réponses: 5
    Dernier message: 10/12/2013, 22h07
  3. Lister les fichiers d'un répertoire (ordre alphabétique)
    Par Mysti¢ dans le forum Général Python
    Réponses: 2
    Dernier message: 15/01/2007, 17h10
  4. lister les fichiers d'un répertoire et les ouvrir
    Par thong36 dans le forum Langage
    Réponses: 1
    Dernier message: 18/10/2006, 10h43
  5. [CF][PPC/C#] Comment lister les fichiers d'un répertoire ?
    Par dady dans le forum Windows Mobile
    Réponses: 18
    Dernier message: 20/05/2005, 14h35

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