-
ORACLE 存储过程 创建多级目录问题和BLOB导出问题!10
目的是根据表的相关字段创建多级目录,并将BLOB存储其中。
但存储过程中 涉及到JAVA.IO,都必须先授权dbms_java.grant_permission( 'user', 'SYS:java.io.FilePermission', v_loc_dir_str, 'read' ),而且是每级目录都要授权;
由于导出的BLOB文件很多,大约500个G左右,所以这短代码没跑几分钟就报 ORA-04031 JAVA POOL 错误,错误指向dbms_java.grant_permission。查资料得知是放入太多的对象到共享池。
现在解决方法我想到的就这几个,一个是增加共享池,一个是全用JAVA代码写,一个是优化存储过程。
如果不考虑用JDBC来做,还是用存储过程来做,请问能不能做,我这段代码该怎么修改?
下面是代码片段:declare cursor c_folders is select * from table1 where noa='01001' and nob='1987'; v_root varchar2(4);--盘符 v_loc_dir varchar2(50); v_loc_dir_str varchar2(100); begin v_root:='d:\'; v_loc_dir:='01001\1987'; v_loc_dir_str:=v_root||'01001'; --dbms_output.put_line( 'no1:'||v_loc_dir_str ); dbms_java.grant_permission( 'user', 'SYS:java.io.FilePermission', v_loc_dir_str, 'read' ); dbms_java.grant_permission( 'user', 'SYS:java.io.FilePermission', v_loc_dir_str, 'write' ); createfolder(v_loc_dir_str); v_loc_dir_str:=v_loc_dir_str||'\1987'; --dbms_output.put_line( 'no2:'||v_loc_dir_str ); dbms_java.grant_permission( 'user', 'SYS:java.io.FilePermission', v_loc_dir_str, 'read' ); dbms_java.grant_permission( 'user', 'SYS:java.io.FilePermission', v_loc_dir_str, 'write' ); createfolder(v_loc_dir_str); v_loc_dir:=v_loc_dir_str; for i in c_folders loop --dbms_output.put_line( 'folderno:'||i.folderno ); --************************************************************************* declare cursor c_archives is select * from table2 where folderno=i.folderno; v_loc_dir2 varchar2(100); begin v_loc_dir_str:=v_loc_dir||'\'||i.yearfolderno; --dbms_output.put_line( 'no4:'||v_loc_dir_str ); dbms_java.grant_permission( 'user', 'SYS:java.io.FilePermission', v_loc_dir_str, 'read' ); dbms_java.grant_permission( 'user', 'SYS:java.io.FilePermission', v_loc_dir_str, 'write' ); createfolder(v_loc_dir_str); v_loc_dir2:=v_loc_dir_str; for ch in c_archives loop --dbms_output.put_line( 'archiveno:'||ch.archiveno ); ------------------------------------------------------------------- declare cursor c_ori is select * from table3 where recordcode=ch.recordcode; v_blob BLOB; v_no integer; v_fileNameExt varchar2(10); v_loc_dir3 varchar2(10); begin --v_loc_dir3:=ch.pageno; v_loc_dir_str:=v_loc_dir2||'\'||ch.pageno; --dbms_output.put_line( 'no5:'||v_loc_dir_str); dbms_java.grant_permission( 'user', 'SYS:java.io.FilePermission', v_loc_dir_str, 'read' ); dbms_java.grant_permission( 'user', 'SYS:java.io.FilePermission', v_loc_dir_str, 'write' ); createfolder(v_loc_dir_str); Execute immediate 'create or replace directory dir_temp as '||chr(39)||v_loc_dir_str||chr(39); v_no:=1; for o in c_ori loop select files,filetype into v_blob,v_fileNameExt from table4 where filecode=o.filecode; to_file('DIR_TEMP',v_no||'.'||v_fileNameExt,v_blob); v_no:=v_no+1; end loop; Execute immediate 'DROP DIRECTORY dir_temp'; end; ------------------------------------------------------------------ end loop; end; --************************************************************************* end loop; end;
2011年3月15日 11:48
目前还没有答案
相关推荐
Oracle数据库在存储大对象(BLOB和CLOB)时提供了强大的功能,但处理这些类型的数据进行导入导出可能会带来挑战。"Oracle导出Clob,Blob工具版本2" 是一个专为解决这个问题而设计的应用程序,它改进了对CLOB...
Oracle数据库在存储大对象(BLOB)数据时,提供了高效且灵活的方式,使得二进制数据如图片、文档等能够安全地保存在数据库中。批量导出Oracle数据库中的BLOB字段生成图片,是一项常见的需求,尤其对于那些需要将...
批量导出oracle bolb图片到本地文件
在描述中提到的“Oracle导出Clob,Blob等大字段工具”就是为了解决这个问题而设计的,它是一个自编写的实用程序,方便用户导出和管理Oracle数据库中的大对象数据。 Oracle数据库中的Clob类型用于存储大量的文本数据...
通过这种方式,你可以有效地管理和处理存储在Oracle数据库中的大量BLOB数据,使其能够以文件形式在本地系统上访问和使用。 总之,批量导出Oracle数据库中的BLOB字段是一项技术性较强的任务,涉及到数据库连接、SQL...
使用PL/SQL脚本将Oracle的Blob字段中存储的图片批量导出到文件夹,可在文件夹中直接查看。
总的来说,Blob类型图片批量导出工具是一款高效实用的数据库辅助工具,它有效地解决了从Oracle数据库中批量导出Blob图片的问题,提高了工作效率。用户只需熟悉基本的数据库操作和SQL语法,就可以轻松管理和导出Blob...
在IT行业中,数据库管理系统(DBMS)如Oracle和MySQL在数据存储方面扮演着至关重要的角色。Oracle数据库系统支持多种复杂的数据类型,其中包括BLOB(Binary Large Object),用于存储非结构化的大数据,如图片、音频...
Oracle照片导出是一款基于C#开发的工具,主要用于从Oracle数据库中导出Blob类型的图片数据。Blob(Binary Large Object)是Oracle数据库用于存储大对象,如图像、音频或视频文件等非结构化数据的数据类型。这个工具...
Blob(Binary Large Object)在数据库中用于存储大对象,如图像、音频或视频等非结构化数据。批量导出Blob工具是一种专门针对这类数据进行批量处理的实用程序,旨在提高数据库管理和数据迁移的效率。本工具的核心...
在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object)这两种数据类型。Oracle数据库系统支持这两种数据类型,用于存储大量文本...
- 存储机制:MySQL的`TEXT`和`BINARY`系列数据类型通常存储在数据页中,而Oracle的`CLOB`和`BLOB`可以存储在表空间中,允许更大的数据量。 - 索引支持:Oracle支持对`CLOB`和`BLOB`字段建立索引,而MySQL的索引...
本文将深入探讨如何使用JavaScript库`Export2Excel.js`和`Blob.js`来实现将数据导出为表格(Excel)格式。这两个库提供了一种便捷的方式,使用户能够在前端直接处理数据并生成可下载的Excel文件,无需后端服务器的...
### Oracle Blob类型转换为文件读取的相关知识点 在软件开发过程中,尤其是在处理数据库中的二进制大对象(Binary Large Object, 简称BLOB)时,经常需要将数据库中的BLOB数据转换为文件进行读取或处理。本文将详细...
2. **数据导出**:使用ORACLE提供的工具,如SQL*Plus或者PL/SQL Developer,或者通过编写SQL查询或存储过程来提取BLOB数据。通常,我们可以将BLOB数据转化为HEX字符串或Base64编码,以便在文本格式下传输。 3. **...
在Oracle数据库环境中,数据类型BLOB(Binary Large Object)用于存储大量的二进制数据,如图像、音频或视频文件,而CLOB(Character Large Object)则用于存储大量文本数据。在某些情况下,可能需要将BLOB类型的...
写入Blob字段时,先创建`OracleParameter`对象,将其Direction设置为` ParameterDirection.Input `,OracleDbType设置为`OracleDbType.Blob`,然后赋值。以下是一个示例: ```csharp // 读取Blob字段 using ...
在Oracle数据库中,LongRaw和Blob都是用于存储大对象(LOB)的数据类型,但它们有各自的特点和适用场景。在某些情况下,可能需要将LongRaw字段转换为Blob字段,这通常是因为Blob提供更好的管理和处理大型二进制数据...
创建源表(DB2)和目标表(Oracle)的控制表。 b. 注册源表到复制数据源。 c. 定义预定集,指定源表到目标表的映射。 d. 在预定集中添加计算列“flag”,设置为常量值“1”。 e. 手动在Oracle目标表中添加BLOB...
"Oracle导出图片源代码"是针对这个需求编写的一段程序,它可以有效地从Oracle数据库中导出存储在BLOB字段中的图片。 首先,我们要理解Oracle数据库中如何存储和访问图片。BLOB字段用于存储大量的二进制数据,包括...