利用oracle自带的utl_file包可以访问磁盘文件,但有个限制--无法访问文件夹?什么意思呢?就是说oracle只能访问指定的文件,而不能访问文件夹下的未知文件。所以,如果要通过oracle去遍历某指定路径下的所有文件,sorry, impossible! 但是,有一种替代方案可以助你一臂之力!
众所周知java之File类指向的可以是目录也可以是文件,如果指向目录,可以用file.list()找到包含的文件及目录,so that,我可以用java来遍历文件,然后返回一个值给oracle再进行后续操作。
Come on, let's talk about this case!
oracle调用java可以分三个步骤:
第一步:在PLSQL客户端里写java代码(类及方法),实现oracle无法做的工作或你想要让java做的工作;
--功能:返回所有文件字段串
create or replace and compile java source named file_list as
import java.io.File;
public class file_list
{
public static String entry(String path)
{
StringBuffer resultBuffer = new StringBuffer();
try{
File file = new File("I:\\"+path);
resultBuffer.append(file.getAbsolutePath());
String[] files = file.list();
resultBuffer.append("----");
for(int i=0; i
StringBuffer fileStr = new StringBuffer("
fileStr.append(path.replace(" mce_src="http://www.qdda.gov.cn/");
fileStr.append(path.replace("\\', '/'));
fileStr.append(files[i]);
fileStr.append("'>
");resultBuffer.append(fileStr.toString());
}
}catch(Exception ex){
resultBuffer.append("----");
resultBuffer.append(ex);
}
return resultBuffer.toString();
}
}
第二步:写oracle函数(function),调用java类方法;
create or replace function func_file_list(path in varchar2) return varchar2 as
language java name 'file_list.entry(java.lang.String) return java.lang.String' ;
第三步:写oracle存储过程(procedure)或客户端调用程序;
create or replace procedure proce_transfer_