我想检索包含oracle表单和菜单以及报告和某些txt文件的特定文件夹中所有文件的列表...
您是否知道如何以ORACLE形式检索这些数据,并将它们自动插入我的数据块?
我使用oracle form 6.0。
答案 0 :(得分:5)
我在这些方面做了一些事情:
为要列出的目录创建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 };
}
}
}
用于调用java的PL / SQL可调用过程:
CREATE OR REPLACE PROCEDURE get_dir_list(pi_directory IN VARCHAR2)
AS LANGUAGE JAVA
name 'DirList.getList(java.lang.String)';
最后,在表单中调用过程get_dir_list将使用目录中的文件填充表格,然后您可以将其读入表单块。
Java代码直接来自Tom Kyte的书(不记得是哪一本)。
编辑:
实际上,所有代码都完全取消了这个AskTom thread。
答案 1 :(得分:3)
外部表还有另一种有趣的方法,可以在不使用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
这种方法与@ DCookie的回答中提到的Ask Tom thread相同。