`
maincoolbo
  • 浏览: 528177 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用PL/SQL从数据库中读取BLOB对象

SQL 
阅读更多


使用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常用47个工具包

    Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言的功能结合起来,为数据库管理和开发提供了丰富的工具。在Oracle环境中,PL/SQL是构建高效、可靠应用程序的关键组件。以下是对"Oracle PL/SQL常用47个工具...

    PL/SQL学习文件

    - **PL/SQL**是一种专门为Oracle数据库设计的过程化语言,它结合了SQL的数据操纵能力与传统编程语言的流程控制功能,使得开发者能够在数据库环境中编写更为复杂的应用逻辑。 #### 二、PL/SQL与SQL的区别 - **SQL**...

    plsql 基础培训PPT

    Oracle PL/SQL是一种过程化SQL语言,用于在Oracle数据库中编写复杂的数据库操作程序。它是Oracle对SQL的扩展,使得开发者能够结合SQL的数据处理能力与过程化编程语言的控制结构。PL/SQL的主要特点包括: 1. **块...

    通过PLSQL的进行oracle数据库导入导出

    PL/SQL Developer提供了灵活的导入导出工具,结合特定的处理策略,可以有效地解决Oracle数据库中的数据导入导出问题,尤其是在处理大型对象(如CLOB和BLOB)时。这使得在测试环境搭建、故障恢复等场景下,可以更加...

    Oracle P/L SQL实现文件压缩、解压功能(最新版)

    在PL/SQL中实现文件压缩,首先需要打开一个BLOB对象来保存压缩后的数据。然后,使用`UTL_ZIP.ADD_TO_ZIP`函数将要压缩的文件内容添加到BLOB中,最后调用`UTL_ZIP.CREATE_ZIP`将BLOB内容写入ZIP文件。解压过程则相反...

    oracle pl/sql programming

    主要内容涵盖随附光盘中的内容介绍、从PL/SQL调用存储过程的方法及其限制条件,以及Oracle内置包的具体功能。 ### 随附光盘内容 #### 1. 安装指南 随附光盘中包含了安装指南,该指南提供了详细的步骤来帮助用户...

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

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

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

    以下是一个示例PL/SQL代码段,用于遍历`photos`表,读取BLOB数据,并将其保存为本地文件: ```sql DECLARE v_blob BLOB; v_filename VARCHAR2(255); v_file UTL_FILE.FILE_TYPE; BEGIN FOR r IN (SELECT ...

    PLSQL教材(非常详细)

    - **数据库赋值**:直接从数据库表中读取数据到变量。 - **类型兼容赋值**:当变量类型相同时可以直接赋值。 - **变量作用范围及可见性** - 变量的作用范围取决于其声明的位置,可以在块级、子程序级等不同范围...

    分块读取Blob字段数据演示(Delphi + Oracle)

    分块读取Blob的原理是将大文件分成较小的数据块,每次只从数据库中读取一块,而不是一次性加载整个Blob。在Delphi中,可以使用Oracle的ODAC(Oracle Data Access Components)库来实现。下面是一个简单的分块读取...

    Oracle PL SQL BuiltIns - Pocket Reference

    Oracle PL/SQL Built-ins是Oracle数据库中一组内置的程序包,它们提供了丰富的功能,用于处理数据库操作、进程管理、队列服务、数据描述等。这些内置程序包极大地扩展了PL/SQL语言的能力,使得开发人员可以更加高效...

    解析PL/SQL Developer导入导出数据库的方法以及说明

    若要导入.dmp文件,可以使用`Tools` -&gt; `Import Tables` -&gt; `Oracle Import`,这将读取.dmp文件并将其内容还原到数据库中。 **一些说明** - **Tools -&gt; Export User Objects** 这个选项导出的是纯文本的SQL脚本...

    plsql查询数据库时中文字段为乱解决方法.txt

    在IT领域,尤其是在数据库管理与查询中,遇到中文字符显示为乱码是一个常见的问题,尤其在使用PL/SQL Developer或类似工具查询Oracle数据库时。本文将深入探讨这一问题的成因,并提供有效的解决方案。 ### PL/SQL...

    福建省电力公司oracle培训教材--PLSQL语言篇.pptx

    PL/SQL(Procedural Language/SQL)是Oracle数据库系统中的编程语言,它结合了SQL的查询能力与过程化编程的灵活性,用于开发高效、可靠的数据库应用程序。PL/SQL提供了丰富的数据类型、控制结构、游标、异常处理和...

    oracle中blob 字段类型的应用

    另一个示例`getclob`函数是一个返回Clob内容的PL/SQL函数,它也使用动态SQL从指定位置读取Clob数据。这些示例展示了如何在PL/SQL中灵活处理和操作Blob字段。 在实际应用中,使用Blob字段类型时,需要考虑性能和存储...

    某电力公司oracle培训教材.pptx

    在PL/SQL中,SQL语句可以直接嵌入到程序块中,用于与数据库进行交互,如创建、读取、更新和删除数据。此外,PL/SQL还提供了内置的SQL函数,如字符串函数UPPER和LOWER用于大小写转换,SUBSTR用于提取字符串的一部分。...

    plsql基础教程

    包是PL/SQL中用于组织和封装函数、过程和其他对象的容器,提高了代码的管理和维护效率。 #### 八、触发器 触发器是在特定数据库事件发生时自动执行的PL/SQL代码段,用于实现数据的自动维护和安全控制。 总之,PL/...

    PLSQL_Oracle 编程讲义

    - **数据删除例子**:演示如何使用PL/SQL从数据库表中删除记录。 #### 第三部分:PL/SQL流程控制语句 **3.1 条件语句** PL/SQL支持IF语句,用于根据条件执行不同的代码路径。 **3.2 循环** PL/SQL支持三种类型...

    精通oracle 10g plsql 编程-学习笔记

    - PL/SQL中可以使用的SQL函数: 如`TO_DATE`、`TO_CHAR`等。 #### 四、使用SQL语句 **4.1 使用基本查询** - **处理NULL**: 可以使用`NVL`和`NVL2`函数来处理可能存在的NULL值。 - **数据分组**: 使用`GROUP BY`...

Global site tag (gtag.js) - Google Analytics