oracle 获取系统文件目录

1.首先创建一个表空间crm 然后在创建一个用户名crm:

接下来就是创建零时表:dirlist

create global temporary table crm.dirlist(

    filename varchar2(255),

    filesize number,

    filedate date)

on commit delete rows;

 

2.创建JAVA资源包DirList

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 存储过程获取指定目录文件信息p_get_dir_list

CREATE OR REPLACE PROCEDURE CRM.p_get_dir_list(i_directory IN VARCHAR2) AS

 LANGUAGE JAVA NAME 'DirList.getList(java.lang.String)';

 

 

4,按照上面的几个步骤做完,执行存储过程exec crm.p_get_dir_list('E:/脚本');

begin crm.p_get_dir_list('E:/ 脚本'); end; 会报如下异常:

ORA-29532: Java 调用被未捕获的 Java 异常错误终止: java.security.AccessControlException: the Permission (java.io.FilePermission E:/ 脚本 read) has not been granted to CRM. The PL/SQL to grant this is dbms_java.grant_permission( 'CRM', 'SYS:java.io.FilePermission', ' E:/ 脚本', 'read' )

ORA-06512: "CRM.GET_DIR_LIST", line 1

ORA-06512: line 2

 

那么遇见上面的错误怎么解决呢? 其实很简单,错误提示已经给出了解决方案! 由于权限不足引起的错误,那么我们用 dbms_java.grant_permission 来指定访问目录的权限!

 

1.  首先在开始菜单运行-cmd –sqlplus

2.  在输入用户名的时候 sys as sysdba

3.  密码:lester

4.  exec dbms_java.grant_permission( 'CRM', 'SYS:java.io.FilePermission', 'E:/脚本', 'read' );

5.  exec dbms_java.grant_permission( 'CRM', 'SYS:java.io.FilePermission', ' E:/脚本/*', 'read' );

6.  此处需要用SYS用户执行dbms_java.grant_permission分别授权目录和目录文件列表(*代替即可)访问权限给指定用户。然后执行:

7.  exec crm.p_get_dir_list(' E:/脚本');

8.  在执行查询语句!select * from crm.dirlist. OK 大功告成。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值