ORACLE获取操作系统目录下文件列表
来源:互联网 发布:期货从业题库知乎 编辑:程序博客网 时间:2024/05/03 07:41
获取操作系统目录下文件列表
很久之前写了《关于UTL_FILE包体的使用》,那个脚本需要手工维护文件名列表,比较麻烦,后来一直想能否自动读取指定目录下的文件名,然后使用我那个UTL_FILE过程读取文件内容。有试过使用ls 命令进行重定向到日志文件,并配合Linux的定时任务(crontab)来解决,后来由于工作原因停止了测试,最后不了了之。前天看了盖老大的《循序渐进ORACLE》,发现了"9.6 获取操作系统文件列表"一节(P383),颇感意外,欣喜异常。适逢周末,决定小试一把。
1.创建临时表
create global temporary table crm.dirlist(
filename varchar2(255),
filesize number,
filedate date)
on commit delete rows;
/
创建临时表保存文件列表信息。此处使用临时表的好处是:循环取文件列表时无需对表进行清空处理。
2.创建JAVA SOURCE过程
此过程用户访问操作系统目录并读取文件列表.
create or replace and compile java source named DirList as
import java.io.*;
import java.sql.*;
public class DirList
{
public static void getList(String directory) throws SQLException
{
File path=new File(directory);
String[] fileList=path.list();
String fileName;
long fileSize;
long fileDate;
for (int i=0;i<fileList.length; i++)
{
fileName=fileList[i];
File fpath=new File(directory+'/'+fileName);
fileSize=fpath.length();
fileDate=fpath.lastModified();
#sql{insert into crm.dirlist(filename, filesize, filedate)
values(:fileName,:fileSize,to_date('01/01/1970','mm/dd/yyyy')+:fileDate/(24*60*60*1000))};
}
}
}
3.创建ORACLE存储过程
此过程用于调用和执行JAVA存储过程(DirList)
CREATE OR REPLACE PROCEDURE CRM.p_get_dir_list(i_directory IN VARCHAR2) AS
LANGUAGE JAVA NAME 'DirList.getList(java.lang.String)';
4.执行p_get_dir_list过程获取数据
SQL> exec crm.p_get_dir_list('E:/割接/10_Transition_SVN_NEW/1_C网在用提取脚本/2.三户');
begin crm.p_get_dir_list('E:/割接/10_Transition_SVN_NEW/1_C网在用提取脚本/2.三户'); end;
ORA-29532: Java 调用被未捕获的 Java 异常错误终止: java.security.AccessControlException: the Permission (java.io.FilePermission E:/割接/10_Transition_SVN_NEW/1_C网在用提取脚本/2.三户 read) has not been granted to CRM. The PL/SQL to grant this is dbms_java.grant_permission( 'CRM', 'SYS:java.io.FilePermission', 'E:/割接/10_Transition_SVN_NEW/1_C网在用提取脚本/2.三户', 'read' )
ORA-06512: 在 "CRM.GET_DIR_LIST", line 1
ORA-06512: 在 line 2
执行时出错,提示无权限。这里耽误了很久,搜索了很多关于这个错误的帖子,都未提到解决办法。后来根据这个错误提示,用SYS执行:
SQL> exec dbms_java.grant_permission( 'CRM', 'SYS:java.io.FilePermission', 'E:/割接/10_Transition_SVN_NEW/1_C网在用提取脚本/2.三户', 'read' );
PL/SQL procedure successfully completed
SQL> exec dbms_java.grant_permission( 'CRM', 'SYS:java.io.FilePermission', 'E:/割接/10_Transition_SVN_NEW/1_C网在用提取脚本/2.三户/*', 'read' );
PL/SQL procedure successfully completed
此处需要用SYS用户执行dbms_java.grant_permission分别授权目录和目录文件列表(*代替即可)访问权限给指定用户。然后执行:
SQL> exec crm.p_get_dir_list('E:/割接/10_Transition_SVN_NEW/1_C网在用提取脚本/2.三户');
PL/SQL procedure successfully completed
5.查询文件列表信息
SQL> col FILESIZE for a20
SQL> col FILENAME for a40
SQL> col FILEDATE for a30
SQL> select * from crm.dirlist;
FILENAME FILESIZE FILEDATE
------------------------------------------------------ ---------------------------- ------------------------------
.svn 0 2008-11-7 1:55:23
2.1--中间表数据倒换脚本-客户数据.sql 9355 2008-10-9 3:35:34
2.10--中间表数据倒换脚本-客户扩展.sql 5833 2008-10-8 7:02:30
2.2--中间表数据倒换脚本-帐户数据.sql 3993 2008-11-4 3:35:13
2.3--中间表数据倒换脚本-产品.sql 3501 2008-11-7 1:45:41
2.4--中间表数据倒换脚本-商品.sql 12432 2008-11-4 8:26:33
2.5--中间表数据倒换脚本-产品特性.sql 20027 2008-11-4 8:27:35
2.6--中间表数据倒换脚本-商品关联.sql 1827 2008-10-8 7:02:30
2.7--中间表数据倒换脚本-帐务数据.sql 4887 2008-10-13 7:43:28
2.8--中间表数据倒换脚本-商品担保.sql 5775 2008-10-22 2:57:30
2.9--中间表数据倒换脚本-客户联系人.sql 2548 2008-10-9 9:22:12
11 rows selected
The result is very perfect!盖老大功力窥然可见,佩服,佩服!
- ORACLE获取操作系统目录下文件列表
- ORACLE获取操作系统目录下文件列表
- oracle 获取操作系统目录下文件列表
- delphi 2010 获取目录下文件列表
- dos获取目录下文件列表
- 【Linux】获取指定目录下文件列表
- c/c++ 获取目录下文件列表
- linux C++获取目录下文件列表
- Android 按照日期从旧到新获取目录下文件列表
- 获取文件夹下文件列表
- C# 目录操作(新建,删除),获取目录下文件列表
- 获取指定文件夹下文件列表
- PowerShell获取指定目录下文件列表和大小并保存成txt文档
- C/C++,windows 和 linux 获取目录下文件列表的方法
- java获取工程目录下文件
- jsp获取某一目录下文件
- java获取工程目录下文件
- python 获取当前目录下文件
- 旧事新提-varchar和Nvarchar区别
- SharePoint 学习网站
- 安详——王蒙
- 个人ABAP文章汇总
- SqlServer 2008 出现mscorlib错误提示的解决办法
- ORACLE获取操作系统目录下文件列表
- 数据库内连接、左连接、右连接详解
- hibernate配置oracle sequence主键相关异常
- OnDraw与OnPaint有什么区别?(转)
- DataTable中隐藏列栏位
- Twitter Storm入门
- 设置Java环境变量
- 第十步:解决IE浏览器的显示BUG
- 第九步:导航条的制作