使用PL/SQL从数据库中读取BLOB对象
1.确认现有对象
SQL> col fdesc for a30
SQL> select fid,fname,fdesc from bobo_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:\oradata\Pic';
Directory created.
SQL>
SQL> grant read,write on directory BLOBDIR to bobo;
Grant succeeded.
SQL>
3.创建存储过程
SQL> connect bobo/bobo
Connected.
SQL>
SQL> CREATE OR REPLACE PROCEDURE bobo_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 bobo_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:\oradata\Pic
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 bobo_dump_blob('ShaoLin.jpg','01.jpg')
PL/SQL procedure successfully completed.
SQL> host ls -l d:\oradata\Pic
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 bobo_dump_blob('DaoYing.jpg','02.jpg')
PL/SQL procedure successfully completed.
SQL> host ls -l d:\oradata\Pic
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 1 gqgai None 1768198 Apr 19 10:12 ShaoLin.jpg
分享到:
相关推荐
Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言的功能结合起来,为数据库管理和开发提供了丰富的工具。在Oracle环境中,PL/SQL是构建高效、可靠应用程序的关键组件。以下是对"Oracle PL/SQL常用47个工具...
- **PL/SQL**是一种专门为Oracle数据库设计的过程化语言,它结合了SQL的数据操纵能力与传统编程语言的流程控制功能,使得开发者能够在数据库环境中编写更为复杂的应用逻辑。 #### 二、PL/SQL与SQL的区别 - **SQL**...
Oracle PL/SQL是一种过程化SQL语言,用于在Oracle数据库中编写复杂的数据库操作程序。它是Oracle对SQL的扩展,使得开发者能够结合SQL的数据处理能力与过程化编程语言的控制结构。PL/SQL的主要特点包括: 1. **块...
PL/SQL Developer提供了灵活的导入导出工具,结合特定的处理策略,可以有效地解决Oracle数据库中的数据导入导出问题,尤其是在处理大型对象(如CLOB和BLOB)时。这使得在测试环境搭建、故障恢复等场景下,可以更加...
在PL/SQL中实现文件压缩,首先需要打开一个BLOB对象来保存压缩后的数据。然后,使用`UTL_ZIP.ADD_TO_ZIP`函数将要压缩的文件内容添加到BLOB中,最后调用`UTL_ZIP.CREATE_ZIP`将BLOB内容写入ZIP文件。解压过程则相反...
主要内容涵盖随附光盘中的内容介绍、从PL/SQL调用存储过程的方法及其限制条件,以及Oracle内置包的具体功能。 ### 随附光盘内容 #### 1. 安装指南 随附光盘中包含了安装指南,该指南提供了详细的步骤来帮助用户...
2. **数据导出**:使用ORACLE提供的工具,如SQL*Plus或者PL/SQL Developer,或者通过编写SQL查询或存储过程来提取BLOB数据。通常,我们可以将BLOB数据转化为HEX字符串或Base64编码,以便在文本格式下传输。 3. **...
以下是一个示例PL/SQL代码段,用于遍历`photos`表,读取BLOB数据,并将其保存为本地文件: ```sql DECLARE v_blob BLOB; v_filename VARCHAR2(255); v_file UTL_FILE.FILE_TYPE; BEGIN FOR r IN (SELECT ...
分块读取Blob的原理是将大文件分成较小的数据块,每次只从数据库中读取一块,而不是一次性加载整个Blob。在Delphi中,可以使用Oracle的ODAC(Oracle Data Access Components)库来实现。下面是一个简单的分块读取...
Oracle PL/SQL Built-ins是Oracle数据库中一组内置的程序包,它们提供了丰富的功能,用于处理数据库操作、进程管理、队列服务、数据描述等。这些内置程序包极大地扩展了PL/SQL语言的能力,使得开发人员可以更加高效...
若要导入.dmp文件,可以使用`Tools` -> `Import Tables` -> `Oracle Import`,这将读取.dmp文件并将其内容还原到数据库中。 **一些说明** - **Tools -> Export User Objects** 这个选项导出的是纯文本的SQL脚本...
在IT领域,尤其是在数据库管理与查询中,遇到中文字符显示为乱码是一个常见的问题,尤其在使用PL/SQL Developer或类似工具查询Oracle数据库时。本文将深入探讨这一问题的成因,并提供有效的解决方案。 ### PL/SQL...
PL/SQL(Procedural Language/SQL)是Oracle数据库系统中的编程语言,它结合了SQL的查询能力与过程化编程的灵活性,用于开发高效、可靠的数据库应用程序。PL/SQL提供了丰富的数据类型、控制结构、游标、异常处理和...
另一个示例`getclob`函数是一个返回Clob内容的PL/SQL函数,它也使用动态SQL从指定位置读取Clob数据。这些示例展示了如何在PL/SQL中灵活处理和操作Blob字段。 在实际应用中,使用Blob字段类型时,需要考虑性能和存储...
在PL/SQL中,SQL语句可以直接嵌入到程序块中,用于与数据库进行交互,如创建、读取、更新和删除数据。此外,PL/SQL还提供了内置的SQL函数,如字符串函数UPPER和LOWER用于大小写转换,SUBSTR用于提取字符串的一部分。...
包是PL/SQL中用于组织和封装函数、过程和其他对象的容器,提高了代码的管理和维护效率。 #### 八、触发器 触发器是在特定数据库事件发生时自动执行的PL/SQL代码段,用于实现数据的自动维护和安全控制。 总之,PL/...
- **数据删除例子**:演示如何使用PL/SQL从数据库表中删除记录。 #### 第三部分:PL/SQL流程控制语句 **3.1 条件语句** PL/SQL支持IF语句,用于根据条件执行不同的代码路径。 **3.2 循环** PL/SQL支持三种类型...
- PL/SQL中可以使用的SQL函数: 如`TO_DATE`、`TO_CHAR`等。 #### 四、使用SQL语句 **4.1 使用基本查询** - **处理NULL**: 可以使用`NVL`和`NVL2`函数来处理可能存在的NULL值。 - **数据分组**: 使用`GROUP BY`...