赛迪网 > IT技术 数据库 > 精彩更新
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

如何使用PL/SQL读取数据库中的BLOB对象

发布时间:2008.03.27 05:07     来源:赛迪网    作者:Alice

【赛迪网-IT技术报道】使用PL/SQL从数据库中读取BLOB对象:

1.首先,确认现有对象

SQL> col fdesc for a30
SQL> select fid,fname,fdesc from eygle_blob;

    FID FNAME                        FDESC
------------------------ ------------------------------
   1 ShaoLin.jpg                少林寺-康熙手书
   2 DaoYing.jpg                     倒映

2.创建存储Directory

SQL> connect / as sysdba
Connected.
SQL> create or replace directory BLOBDIR as 'D:oradataPic';

Directory created.

SQL>
SQL> grant read,write on directory BLOBDIR to eygle;

Grant succeeded.

SQL>

3.创建存储过程

SQL> connect eygle/eygle
Connected.
SQL>
SQL> CREATE OR REPLACE PROCEDURE eygle_dump_blob (piname varchar2,poname varchar2) IS
  2    l_file      UTL_FILE.FILE_TYPE;
  3    l_buffer    RAW(32767);
  4    l_amount    BINARY_INTEGER := 32767;
  5    l_pos       INTEGER := 1;
  6    l_blob      BLOB;
  7    l_blob_len  INTEGER;
  8  BEGIN
  9    SELECT FPIC
 10    INTO      l_blob
 11    FROM      eygle_blob
 12    WHERE  FNAME = piname;
 13
 14    l_blob_len := DBMS_LOB.GETLENGTH(l_blob);
 15    l_file := UTL_FILE.FOPEN('BLOBDIR',poname,'wb', 32767);
 16
 17    WHILE l_pos < l_blob_len LOOP
 18      DBMS_LOB.READ (l_blob, l_amount, l_pos, l_buffer);
 19      UTL_FILE.PUT_RAW(l_file, l_buffer, TRUE);
 20      l_pos := l_pos + l_amount;
 21    END LOOP;
 22
 23    UTL_FILE.FCLOSE(l_file);
 24
 25  EXCEPTION
 26    WHEN OTHERS THEN
 27      IF UTL_FILE.IS_OPEN(l_file) THEN
 28        UTL_FILE.FCLOSE(l_file);
 29      END IF;
 30      RAISE;
 31  END;
 32  /

Procedure created.

4.最后取出数据

SQL> host ls -l d:oradataPic
total 7618
-rwxrwxrwa   1 gqgai           None            2131553 Apr 19 10:12 DaoYing.jpg
-rwxrwxrwa   1 gqgai           None            1768198 Apr 19 10:12 ShaoLin.jpg

SQL> exec eygle_dump_blob('ShaoLin.jpg','01.jpg')

PL/SQL procedure successfully completed.

SQL> host ls -l d:oradataPic
total 11072
-rwxrwxrwa   1 Administrators  SYSTEM          1768198 Apr 26 07:16 01.jpg
-rwxrwxrwa   1 gqgai           None            2131553 Apr 19 10:12 DaoYing.jpg
-rwxrwxrwa   1 gqgai           None            1768198 Apr 19 10:12 ShaoLin.jpg

SQL>
SQL> exec eygle_dump_blob('DaoYing.jpg','02.jpg')

PL/SQL procedure successfully completed.

SQL> host ls -l d:oradataPic
total 15236
-rwxrwxrwa   1 Administrators  SYSTEM          1768198 Apr 26 07:16 01.jpg
-rwxrwxrwa   1 Administrators  SYSTEM          2131553 Apr 26 07:19 02.jpg
-rwxrwxrwa   1 gqgai           None            2131553 Apr 19 10:12 DaoYing.jpg
-rwxrwxrwa

(责任编辑:卢兆林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 专家:从第三方法律服务看我国信息化法制建设
· 民营企业不上ERP会怎样? 必须贯彻一把手工程
· 排队时代电子银行如何补短板 银行信息化现状
· 信息化灾难降临时如何应对与善后 与灾难竞速
· IT部门应否实施预算制 CIO如何让信息中心站稳
· 公交一卡通不推行实名制 一卡多用可购物买药
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统