利用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<files.length; i++){
-
StringBuffer fileStr = new
StringBuffer(
"<P align='center'><IMG src="
http:
-
fileStr.append(path.replace(" mce_src="
http:
-
fileStr.append(path.replace("\\', '
/'));
-
fileStr.append(files[i]);
-
fileStr.append("'></P>"
);
-
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_data as
-
url varchar2(100
);
-
path varchar2(100
);
-
img_url varchar2(2000
);
-
--档案公布带图数据
-
cursor cur1 is
-
select * from ARCHIVE_PUBLICATION t where t.big_event_id is null
and t.appendix_numb >
0
and t.publish_order is not
null
;
-
r1 ARCHIVE_PUBLICATION%rowtype;
-
begin
-
open cur1;
-
loop
-
fetch cur1 into r1;
-
exit when cur1%notfound;
-
--找出重复的数据
-
-
--图片目录
-
if
r1.publish_order is
null
then
-
path := 'archives_files\' || substr(r1.archive_no, 1, 5) || '
\
' || substr(r1.archive_no, 6, 3) || '
\' ||
-
substr(r1.archive_no, 9
,
5
)||
'\' || substr(r1.archive_no, 14, 4) || '
\';
-
else
-
path := 'archives_files\ziliao\' || r1.publish_order || '
\';
-
end if
;
-
--dbms_output.put_line(path);
-
--授权
-
dbms_java.grant_permission( 'QDDA'
,
'SYS:java.io.FilePermission'
,
'I:\archives_files\', '
READ' );
-
-
--图片路径
-
img_url := func_file_list(path);
-
dbms_output.put_line(r1.id || img_url);
-
-
update subject_articles t set t.content = img_url || r1.content||','
||r1.file_dz||
','
||r1.archive_no||
','
||r1.file_no,
-
t.secondid = '12466747755782031001'
, t.rootid=
'12264731996871389001'
, t.area =
'qd'
-
where t.id = r1.id;
-
commit ;
-
end loop;
-
-
close cur1;
-
commit;
-
-
end proce_transfer_data;
分享到:
相关推荐
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
实例157 动态调用类中的方法 204 实例158 动态实例化类 205 实例159 创建长度可变的数组 206 实例160 利用反射重写toString()方法 208 实例161 反射与动态代理 209 7.3 常见的未检查型异常 210 实例162 算数异常 210...
ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...
实例254 遍历、删除指定目录下的所有文件 330 第5章 会话应用 333 5.1 COOKIE 334 实例255 控制登录用户的过期时间 334 实例256 自动登录 335 实例257 单击登录 336 实例258 统计用户在线时间 339 实例259 限制用户...
实例254 遍历、删除指定目录下的所有文件 330 第5章 会话应用 333 5.1 COOKIE 334 实例255 控制登录用户的过期时间 334 实例256 自动登录 335 实例257 单击登录 336 实例258 统计用户在线时间 339 实例259 限制用户...
使用了六个类五个模块类演示了atl的调用方法 autoplaysnd mp3 播放器源码 重载了自带的控件进行播放 aviplayer avi播放器源码 引用了atl控件播放 beautifulskin 源码 演示了各种控件方法 Browser.Net源码 C#的一...
使用了六个类五个模块类演示了atl的调用方法 autoplaysnd mp3 播放器源码 重载了自带的控件进行播放 aviplayer avi播放器源码 引用了atl控件播放 beautifulskin 源码 演示了各种控件方法 Browser.Net源码 C#的一...
使用了六个类五个模块类演示了atl的调用方法 autoplaysnd mp3 播放器源码 重载了自带的控件进行播放 aviplayer avi播放器源码 引用了atl控件播放 beautifulskin 源码 演示了各种控件方法 Browser.Net源码 C#的一...
使用了六个类五个模块类演示了atl的调用方法 autoplaysnd mp3 播放器源码 重载了自带的控件进行播放 aviplayer avi播放器源码 引用了atl控件播放 beautifulskin 源码 演示了各种控件方法 Browser.Net源码 C#的一...
使用了六个类五个模块类演示了atl的调用方法 autoplaysnd mp3 播放器源码 重载了自带的控件进行播放 aviplayer avi播放器源码 引用了atl控件播放 beautifulskin 源码 演示了各种控件方法 Browser.Net源码 C#的一...
使用了六个类五个模块类演示了atl的调用方法 class CDHtmlSinkHandler; // Events Sink Base class CDHtmlEventSink; // IHTMLDocument2 Events Sink // IDispatch class CDHtmlControlSink; // ActiveX Control ...
89 2.8 TreeView控件应用 91 实例073 将数据库数据显示到树视图中 91 实例074 用TreeView控件制作导航界面 93 实例075 用TreeView控件遍历磁盘目录 94 实例076 TreeView控件在数据库中的...
实例078 用TreeView控件遍历磁盘目录 102 实例079 修改TreeView控件中的节点 105 实例080 将XML文件节点绑定到TreeView控件中 106 2.8 DataGridView控件应用 108 实例081 DataGridView控件的分页功能 108 实例...