2010-11-15 6 views
2

Я хочу, чтобы получить список всех файлов в определенной папке, которая включала форму оракула и меню и отчет и некоторые текстовый файл ...проблемы в поиске списка файлов в каталоге

У вас есть какие-либо идеи, как я могу получить эти данные в форме ORACLE и автоматически вставить их в свой блок данных?

Я использую форму оракула 6.0.

+0

Возможно ли это в версии ver6 или нет? – Amir

+1

Является ли каталог на сервере базы данных или клиенте? –

+0

Клиент Я уже исправил это другим способом. спасибо – Amir

ответ

4

я сделал что-то вдоль этих линий:

Создать каталог для Oracle для каталога, который вы хотите перечислить:

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

Построить временную таблицу:

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

Вам нужно хранимая процедура 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 }; 
     } 
    } 

    } 

И вызываемая процедура PL/SQL для вызова Java:

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

Наконец, вызов процедуры get_dir_list внутри вашей формы будет заполнить таблицу с файлами в каталоге, который вы можете читать в вашей форме блока ,

Код java появился прямо из книги Тома Ките (не помните, какой из них).

EDIT:

На самом деле, весь код в значительной степени снят с этого AskTom thread.

+0

это было хорошо, но я не уверен, что это работа на 6? – Amir

+0

Именно это я и использую. После его создания вы вызываете его точно так же, как и любая другая хранимая процедура, он строит список каталогов в таблице temp, и ваша форма может выбрать из этой таблицы. – DCookie

+0

У меня вопрос не по теме, я использую сервер solaris, по приведенному выше коду мы можем видеть все папки Solaris, могу ли я узнать, как я могу разрешить моему пользователю Solaris видеть мой другой сетевой сервер? – Amir

1

Существует еще один интересный подход с внешними таблицами, что делает его еще проще получить такие списки без использования 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 

В 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 

Этот подход был добавлен в тот же Ask Tom thread, как указано в ответе @ DCookie.