关闭

Oracle使用存储过程下载Blob大对象

标签: blob下载存储过程oracle
582人阅读 评论(1) 收藏 举报
分类:

1. 创建存储过程 copy_blob_data_to_file

CREATE OR REPLACE PROCEDURE copy_blob_data_to_file(
p_blob_id INTEGER,
p_directory VARCHAR2
) AS
v_src_blob BLOB;
v_src_file_name VARCHAR2(20);
v_file UTL_FILE.FILE_TYPE;
v_offset INTEGER := 1;
v_amount INTEGER := 32767;
v_binary_buffer RAW(32767);
BEGIN
-- get the LOB locator of the BLOB
SELECT E.FJ,E.FJDZ  --从表中查询sjid为p_blob_id的大对象及其文件名
INTO v_src_blob,v_src_file_name
FROM EVENT E
WHERE E.SJID = p_blob_id;
-- open the file for writing of bytes (up to v_amount bytes at a time)
v_file := UTL_FILE.FOPEN(p_directory, v_src_file_name, 'wb', v_amount);
-- copy the data from v_src_blob to the file
LOOP
BEGIN
-- read characters from v_src_blob into v_binary_buffer
DBMS_LOB.READ(v_src_blob, v_amount, v_offset, v_binary_buffer);
-- copy the binary data from v_binary_buffer to the file
UTL_FILE.PUT_RAW(v_file, v_binary_buffer);
-- add v_amount to v_offset
v_offset := v_offset + v_amount;
EXCEPTION
-- when there is no more data in the file then exit
WHEN NO_DATA_FOUND THEN
EXIT;
END;
END LOOP;
-- flush any remaining data to the file
UTL_FILE.FFLUSH(v_file);
-- close the file
UTL_FILE.FCLOSE(v_file);
DBMS_OUTPUT.PUT_LINE('Copy successfully completed.');
END copy_blob_data_to_file;

2. 调用存储过程copy_blob_data_to_file()

call copy_blob_data_to_file(20,’E:\exp’);

3. 调用过程中如果遇到如下错误

ORA-29280: invalid directory path
路径名不存在

4. 解决方法:

这里写图片描述

utl为空,设置utl_file_dir值

这里写图片描述

重启ORACLE服务,验证

这里写图片描述

5. 结束

现在utl_file_dir被赋值E:\exp,重新调用存储过程copy_blob_data_to_file(),执行成功,大对象BLOB从数据库中下载到本地文件。

0
0
查看评论

使用存储过程向Oracle数据库中插入BLOB文件

这段时间在做扬子石化的GIS开发,一直以来遇到一个最大的问题就是上传大文件类型(BLOB)超过32K就会从数据库中报出错来,十分头痛,前天在网上看到一个解决方案,是用SQL语句在界面中先插入一个empty_blob(),再通过update语句更新,感觉虽然解决问题,但一直觉得不是很方便,也不符合现在...
  • jack_zy1981
  • jack_zy1981
  • 2008-03-26 19:56
  • 3330

在。NET中应用Oracle存储过程操作BLOB

SQl部分:--一次接线图drop sequence YW_YCJXT_IDcreate sequence YW_YCJXT_IDstart with 1increment by 1;drop table YW_YCJXTtruncate table YW_YCJXTcreate table YW_...
  • gengwei80
  • gengwei80
  • 2004-08-11 17:35
  • 2364

存储过程中使用blob 类型

<br />最近因为做彩信,要把所有图片信息保存到数据库中,所有用到了blob类型。v_blob 开始设置为empty_blob(),然后把传进来的图片信息字段n_blob表示  赋值给v_blob ,具体操作如下<br />SELECT content <b...
  • zcy841013
  • zcy841013
  • 2010-10-19 12:07
  • 164

读取oracle blob字段内容并以文件形式下载

这个也是从网找的代码攒的,做个记录,以后可能会用得着。表里即存了文件的内容,也存了文件的类型。String xh = request.getParameter("xh")==null?"":request.getParameter("xh"...
  • hereyouare
  • hereyouare
  • 2010-11-12 15:15
  • 2589

System.Data.OracleClient调用带blob等大字段类型参数的存储过程

System.Data.OracleClient在插入大字段类型的时候有32K大小限制,据网络收集的一些方法,整理了一下如下(微软企业库示例): 必须在获取临时 LOB 之前开始事务。否则,OracleDataReader 将不能获取后面的数据。还可以通过调用 DBMS_LOB.CREAT...
  • asduery
  • asduery
  • 2010-08-17 19:44
  • 1016

Oracle中的大字段 Blob/Clob

数据库中提供了两种字段类型 Blob  和 Clob 用于存储大型字符串或二进制数据(如图片)。Blob 采用单字节存储,适合保存二进制数据,如图片文件。Clob 采用多字节存储,适合保存大型文本数据。Oracle中处理BLOB/CLOB字段的方式比较特别,所以需要特别注意下面两...
  • nobody_java
  • nobody_java
  • 2007-06-22 10:22
  • 3035

从Oracle导出BLOB(方案2:dblink)

1. Requirements Run a db script in Server2 to manipulate a blob column in a table in a db in Server1 and to export the column to a file in Server1. ...
  • kswaking
  • kswaking
  • 2016-10-17 09:15
  • 979

通过oracle存储过程的Blob参数上传文件

前两天朋友找我做一个上传程序,非常简单的一个东西!我没有用过java,现学现卖,反正也是很简单。 不过,中间除了碰到一个东西,在网上查了半天,也没有找到解决的办法!后来才好不容易成功了。我把这个记录下来,希望对用的人有用!情况是这样,远程服务器是oracle,本地通过调用他的存储存储过程把文件的内容...
  • xwjbs
  • xwjbs
  • 2007-12-22 21:35
  • 2502

dblink传输clob字段三种解决方案

本文参考:http://blog.csdn.net/gavinloo/article/details/6830524 在原文基础上做部分改动。 一、创建临时表 创建test_clob_link: --创建dblink -- Drop existing database link drop data...
  • daxiang12092205
  • daxiang12092205
  • 2014-02-23 10:13
  • 7722

关于mysql innodb 如何保存大对象(BLOB等),最强解析

本博客权威,详细的介绍了,mysql innodb存储引擎如何存储BLOB,TEXT,LONG VARCHAR,LONG VARBINARY等大对象。详细阅读后,相信你对BLOB字段的使用和优化会有不一样的心得。
  • shaochenshuo
  • shaochenshuo
  • 2017-09-08 17:48
  • 426
    个人资料
    • 访问:2746次
    • 积分:96
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    感谢打赏

    支付宝二维码

    微信二维码

    文章分类
    最新评论