2010-11-15 4 views
2

Je veux récupérer la liste de tous les fichiers dans un dossier spécifique inclus sous forme d'oracle et le menu et le rapport et quelques fichiers txt ...pour trouver la liste des fichiers dans le répertoire

Avez-vous une idée de la façon dont je peux récupérer ces données sous forme ORACLE, et les insérer dans mon bloc de données, automatiquement? J'utilise Oracle form 6.0.

+0

est-ce possible en ver6 ou pas? – Amir

+1

Le répertoire est-il sur le serveur de base de données ou le client? –

+0

Client Je le corrige déjà d'une autre manière. merci – Amir

Répondre

4

je fait quelque chose le long de ces lignes:

Créer un répertoire Oracle pour le répertoire que vous voulez à la liste:

create or replace directory YOURDIR 
    as '\path\to\your\directory'; 

Construire une table temporaire:

create global temporary table DIR_LIST 
(
    FILENAME VARCHAR2(255), 
) 
on commit preserve rows; 
grant select, insert, update, delete on DIR_LIST to PUBLIC; 

Vous aurez besoin une procédure stockée Java:

create or replace and compile java source named dirlist as 
import java.io.*; 
    import java.sql.*; 
    import java.text.*; 

    public class DirList 
    { 
    public static void getList(String directory) 
        throws SQLException 
    { 
     File dir = new File(directory); 
     File[] files = dir.listFiles(); 
     File theFile; 

     for(int i = 0; i < files.length; i++) 
     { 
      theFile = files[i]; 
      #sql { INSERT INTO DIR_LIST (FILENAME) 
       VALUES (:theName }; 
     } 
    } 

    } 

et un PL/SQL procédure appelable pour appeler la java:

CREATE OR REPLACE PROCEDURE get_dir_list(pi_directory IN VARCHAR2) 
AS LANGUAGE JAVA 
name 'DirList.getList(java.lang.String)'; 

Enfin, en appelant la procédure get_dir_list dans votre formulaire sera remplir la table avec les fichiers dans votre répertoire, que vous pouvez ensuite lire dans votre bloc de formulaire .

Le code java est tout droit sorti d'un livre de Tom Kyte (ne se rappelle pas lequel).

EDIT:

En fait, tout le code est à peu près de cette levée AskTom thread.

+0

c'était bon mais je ne suis pas sûr que c'est le travail sur 6? – Amir

+0

C'est exactement là où je l'utilise. Une fois que vous l'avez compilé, vous l'appelez comme toute autre procédure stockée, il crée la liste de répertoires dans la table temporaire et votre formulaire peut sélectionner à partir de cette table. – DCookie

+0

J'ai une question hors sujet, j'utilise le serveur Solaris, par le code ci-dessus, nous pouvons voir tous les dossiers Solaris, puis-je savoir comment je peux donner la permission à mon utilisateur Solaris de voir mon autre serveur réseau? – Amir

1

Il y a une autre approche intéressante avec des tables externes qui le rend encore plus facile de récupérer ces listes sans utiliser une procédure stockée java:

mkdir /tmp/incoming 

cat >/tmp/incoming/readdir.sh<<eof 
#/bin/bash 
cd /tmp/incoming/ 
/bin/ls -1 
eof 
# test files 
for i in {1..5}; do touch /tmp/incoming/invoice_no_$RANDOM.pdf; done 

En sqlplus:

create or replace directory incoming as '/tmp/incoming'; 

Directory INCOMMING created. 

create table files (filename varchar2(255)) 
organization external ( 
    type oracle_loader 
    default directory incoming 
    access parameters (
     records delimited by newline 
     preprocessor incoming:'readdir.sh' 
     fields terminated by "|" ldrtrim 
    ) 
location ('readdir.sh') 
); 
/

Table FILES created. 

select * from files; 

FILENAME                  
-------------------------------------------------------------------------------- 
FILES_27463.log                 
invoice_no_20891.pdf                
invoice_no_2255.pdf                
invoice_no_24086.pdf                
invoice_no_30372.pdf                
invoice_no_8340.pdf                
readdir.sh                  

7 rows selected 

a été ajouté cette approche le même Ask Tom thread comme mentionné dans la réponse de @ DCookie.

Questions connexes