0 0

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;

DAO 
2011年3月15日 11:48
目前还没有答案

相关推荐

    Oracle导出Clob,Blob工具版本2

    Oracle数据库在存储大对象(BLOB和CLOB)时提供了强大的功能,但处理这些类型的数据进行导入导出可能会带来挑战。"Oracle导出Clob,Blob工具版本2" 是一个专为解决这个问题而设计的应用程序,它改进了对CLOB...

    批量导出ORACLE数据库BLOB字段生成图片

    Oracle数据库在存储大对象(BLOB)数据时,提供了高效且灵活的方式,使得二进制数据如图片、文档等能够安全地保存在数据库中。批量导出Oracle数据库中的BLOB字段生成图片,是一项常见的需求,尤其对于那些需要将...

    oracle blob图片导出工具

    批量导出oracle bolb图片到本地文件

    Oracle导出Clob,Blob工具

    在描述中提到的“Oracle导出Clob,Blob等大字段工具”就是为了解决这个问题而设计的,它是一个自编写的实用程序,方便用户导出和管理Oracle数据库中的大对象数据。 Oracle数据库中的Clob类型用于存储大量的文本数据...

    批量导出ORACLE数据库BLOB字段生成文件

    通过这种方式,你可以有效地管理和处理存储在Oracle数据库中的大量BLOB数据,使其能够以文件形式在本地系统上访问和使用。 总之,批量导出Oracle数据库中的BLOB字段是一项技术性较强的任务,涉及到数据库连接、SQL...

    【Oracle BLOB】存储的图片批量导出到文件夹

    使用PL/SQL脚本将Oracle的Blob字段中存储的图片批量导出到文件夹,可在文件夹中直接查看。

    blob类型图片批量导出工具

    总的来说,Blob类型图片批量导出工具是一款高效实用的数据库辅助工具,它有效地解决了从Oracle数据库中批量导出Blob图片的问题,提高了工作效率。用户只需熟悉基本的数据库操作和SQL语法,就可以轻松管理和导出Blob...

    oracle中的BLOB(照片)转换到mysql中

    在IT行业中,数据库管理系统(DBMS)如Oracle和MySQL在数据存储方面扮演着至关重要的角色。Oracle数据库系统支持多种复杂的数据类型,其中包括BLOB(Binary Large Object),用于存储非结构化的大数据,如图片、音频...

    Oracle照片导出

    Oracle照片导出是一款基于C#开发的工具,主要用于从Oracle数据库中导出Blob类型的图片数据。Blob(Binary Large Object)是Oracle数据库用于存储大对象,如图像、音频或视频文件等非结构化数据的数据类型。这个工具...

    批量导出blob工具

    Blob(Binary Large Object)在数据库中用于存储大对象,如图像、音频或视频等非结构化数据。批量导出Blob工具是一种专门针对这类数据进行批量处理的实用程序,旨在提高数据库管理和数据迁移的效率。本工具的核心...

    图片存入Oracle中,用clob和blob两种方式

    在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object)这两种数据类型。Oracle数据库系统支持这两种数据类型,用于存储大量文本...

    mysql和Oracle在对clob和blob字段的处理

    - 存储机制:MySQL的`TEXT`和`BINARY`系列数据类型通常存储在数据页中,而Oracle的`CLOB`和`BLOB`可以存储在表空间中,允许更大的数据量。 - 索引支持:Oracle支持对`CLOB`和`BLOB`字段建立索引,而MySQL的索引...

    Export2Excel.js+Blob导出为表格数据

    本文将深入探讨如何使用JavaScript库`Export2Excel.js`和`Blob.js`来实现将数据导出为表格(Excel)格式。这两个库提供了一种便捷的方式,使用户能够在前端直接处理数据并生成可下载的Excel文件,无需后端服务器的...

    oracle blob转文件读取

    ### Oracle Blob类型转换为文件读取的相关知识点 在软件开发过程中,尤其是在处理数据库中的二进制大对象(Binary Large Object, 简称BLOB)时,经常需要将数据库中的BLOB数据转换为文件进行读取或处理。本文将详细...

    ORACLE中BLOB字段导入到SQL SERVER中的IMAGE字段

    2. **数据导出**:使用ORACLE提供的工具,如SQL*Plus或者PL/SQL Developer,或者通过编写SQL查询或存储过程来提取BLOB数据。通常,我们可以将BLOB数据转化为HEX字符串或Base64编码,以便在文本格式下传输。 3. **...

    oracle(blob转换为clob)

    在Oracle数据库环境中,数据类型BLOB(Binary Large Object)用于存储大量的二进制数据,如图像、音频或视频文件,而CLOB(Character Large Object)则用于存储大量文本数据。在某些情况下,可能需要将BLOB类型的...

    C#访问oracle数据库类,带blob字段读写

    写入Blob字段时,先创建`OracleParameter`对象,将其Direction设置为` ParameterDirection.Input `,OracleDbType设置为`OracleDbType.Blob`,然后赋值。以下是一个示例: ```csharp // 读取Blob字段 using ...

    oracle LongRaw 转 Blob

    在Oracle数据库中,LongRaw和Blob都是用于存储大对象(LOB)的数据类型,但它们有各自的特点和适用场景。在某些情况下,可能需要将LongRaw字段转换为Blob字段,这通常是因为Blob提供更好的管理和处理大型二进制数据...

    如何将DB2数据库中的大对象(BLOB,CLOB)数据类型复制到Oracle数据库中

    创建源表(DB2)和目标表(Oracle)的控制表。 b. 注册源表到复制数据源。 c. 定义预定集,指定源表到目标表的映射。 d. 在预定集中添加计算列“flag”,设置为常量值“1”。 e. 手动在Oracle目标表中添加BLOB...

    Oracle导出图片源代码

    "Oracle导出图片源代码"是针对这个需求编写的一段程序,它可以有效地从Oracle数据库中导出存储在BLOB字段中的图片。 首先,我们要理解Oracle数据库中如何存储和访问图片。BLOB字段用于存储大量的二进制数据,包括...

Global site tag (gtag.js) - Google Analytics