`

Oracle中BLOB/CLOB相关操作的使用笔记

 
阅读更多

使用pl/sql读取写入blob对象

一、写文件到BLOB
SQL
>createtableiihero_blob(fidintprimarykey,fnamevarchar(32),fblob);

表已创建。

SQL
>conn/assysdba
已连接。
SQL
>createorreplacedirectoryBLOBDIRas'd:oraclefile';

目录已创建。

SQL
>grantreadondirectoryBLOBDIRtotest;

授权成功。

SQL
>conntest/test
已连接。

SQL
>createsequences_iihero_seq
2startwith1
3incrementby1
4/

序列已创建。

CREATEORREPLACEPROCEDUREiihero_load_blob(pfnameVARCHAR2)
IS
src_fileBFILE;
dst_fileBLOB;
lgh_fileBINARY_INTEGER;
BEGIN
src_file:
=bfilename('BLOBDIR',pfname);

INSERTINTOiihero_blob(fid,fname,f)
VALUES(S_IIHERO_SEQ.Nextval,pfname,EMPTY_BLOB())
RETURNINGf
INTOdst_file;

SELECTfINTOdst_file
FROMiihero_blobWHEREfname=pfnameFORUPDATE;

dbms_lob.fileopen(src_file,dbms_lob.file_readonly);
lgh_file:
=dbms_lob.getlength(src_file);
dbms_lob.loadfromfile(dst_file,src_file,lgh_file);

UPDATEiihero_blobSETf=dst_file
WHEREfname=pfname;

dbms_lob.fileclose(src_file);
commit;
ENDiihero_load_blob;
/


SQL
>colsegment_namefora30
SQL
>conn/assysdba
已连接。
SQL
>selectsegment_name,segment_type,bytes/1024/1024fromdba_segmentswhereow
ner
='TEST';

SEGMENT_NAMESEGMENT_TYPEBYTES
/1024/1024
---------------------------------------------------------------
ST_COURSETABLE.0625
TAB2
TABLE.0625
IIHERO_BLOB
TABLE.0625
SYS_LOB0000030667C00003$$LOBSEGMENT.
0625

已选择34行。

SQL
>conntest/test
已连接。
SQL
>

4.装数据(写数据到BLOB)

SQL
>execiihero_load_blob('ttt.txt');

PL
/SQL过程已成功完成。

SQL
>selectfid,fname,dbms_lob.getlength(f)fromiihero_blob;

FIDFNAMEDBMS_LOB.GETLENGTH(F)
---------------------------------------------------------------
1ttt.txt28729

二、将BLOB中的数据读到文件
1.确认有数据
SQL
>selectfid,fname,dbms_lob.getlength(f)fromiihero_blob;

FIDFNAMEDBMS_LOB.GETLENGTH(F)
---------------------------------------------------------------
1ttt.txt28729

2.创建目录
SQL
>conn/assysdba
已连接。
SQL
>createorreplacedirectoryBLOBDIRas'd:oraclefile';
目录已创建。
SQL
>grantread,writeondirectoryBLOBDIRtotest;
授权成功。

3.创建存储过程
conntest
/test

CREATEORREPLACEPROCEDUREiihero_dump_blob(pinamevarchar2,ponamevarchar2)IS
l_fileUTL_FILE.FILE_TYPE;
l_buffer
RAW(32767);
l_amountBINARY_INTEGER:
=32767;
l_pos
INTEGER:=1;
l_blobBLOB;
l_blob_len
INTEGER;
BEGIN
SELECTfINTOl_blobFROMiihero_blobWHEREFNAME=piname;
l_blob_len:
=DBMS_LOB.GETLENGTH(l_blob);
--dbms_output.put_line(l_blob_len);
--l_file:=UTL_FILE.FOPEN('BLOBDIR',poname,'wb',32767);
l_file:=UTL_FILE.FOPEN('BLOBDIR',poname,'w',32767);

WHILEl_pos<l_blob_lenLOOP
DBMS_LOB.
READ(l_blob,l_amount,l_pos,l_buffer);
UTL_FILE.PUT_RAW(l_file,l_buffer,TRUE);
l_pos:
=l_pos+l_amount;
ENDLOOP;

UTL_FILE.FCLOSE(l_file);

EXCEPTION
WHENOTHERSTHEN
IFUTL_FILE.IS_OPEN(l_file)THEN
UTL_FILE.FCLOSE(l_file);
ENDIF;
RAISE;
END;
/

SQL
>hostdir/b/sd:oraclefile
d:oraclefileexample.txt
d:oraclefile tt.txt




分享到:
评论

相关推荐

    Oracle数据库笔记大全

    在实际操作中,Oracle数据库的管理和开发涉及大量细节和技巧,如性能优化、备份恢复、安全设置等。理解这些基本概念和操作是成为Oracle数据库管理员或开发人员的基础。通过不断学习和实践,可以更好地掌握Oracle...

    笔记Oracle(上)

    5. 数据类型:介绍Oracle支持的各种数据类型,如NUMBER、VARCHAR2、DATE、BLOB、CLOB等,以及它们的适用场景。 6. 视图与索引:视图是虚拟表,用于提供数据的不同视角;索引则可以加速查询性能。笔记可能会详细解释...

    李兴华oracle经典笔记

    在提供的内容片段中,可以提炼出以下Oracle相关知识点: 1. 数据类型说明: - VARCHAR2(n):可变长度字符串,最多存储n个字符。 - NUMBER(n):数字类型,可以指定总位数和小数位数。 - DATE:日期类型,用于存储...

    Oracle-笔记.doc

    第八章 函数:这部分涵盖了Oracle数据库内置的函数,如数学函数、字符串函数、日期时间函数等,以及如何在SQL查询中使用这些函数。 第九章 束缚:束缚或约束是数据库中确保数据完整性的机制,包括唯一性约束、非空...

    Oracle 笔记.rar

    以上只是Oracle数据库知识体系的冰山一角,Oracle笔记中可能涵盖了这些内容的详细解释和实例演示,对于学习和理解Oracle数据库的操作和管理非常有帮助。在实际工作中,掌握这些知识能够帮助数据库管理员和开发者更...

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

    ### 精通Oracle 10g PL/SQL编程学习笔记 #### 一、PL/SQL综述 **1.1 PL/SQL的功能与作用** PL/SQL (Procedural Language for SQL) 是一种专门为Oracle数据库设计的过程化语言,它结合了SQL的数据处理能力与过程化...

    oracle学习笔记.docx

    Oracle支持多种数据类型,包括数值类型(如NUMBER、INTEGER)、字符串类型(如VARCHAR2、CHAR)、日期时间类型(如DATE)、二进制数据类型(如BLOB、CLOB)等。选择合适的数据类型对于存储和处理数据至关重要。 四...

    oracle 笔记总结

    Oracle支持多种数据类型,包括数值类型(如NUMBER、INTEGER)、字符类型(VARCHAR2、CHAR)、日期时间类型(DATE、TIMESTAMP)、二进制数据类型(BLOB、CLOB)等,可以根据实际需求选择合适的数据类型存储数据。...

    MLDN_oracle课堂笔记(全).pdf

    Oracle还支持其他复杂的数据类型,如CLOB(用于存储大文本数据)和BLOB(用于存储大二进制数据)。 8. Oracle错误代码: 文档中出现了一个错误代码ORA-00942,这表示在执行SQL语句时,因为某种原因,数据库无法识别...

    oracle随堂笔记

    5. **数据类型**:Oracle提供了丰富的数据类型,如CHAR、VARCHAR2、NUMBER、DATE、CLOB、BLOB等,用于存储不同类型的数据。 6. **表的设计**:在设计表时,需考虑字段的主键、外键、索引、约束等,以确保数据的一致...

    oracle基础笔记整理

    - BLOB、CLOB:用于存储大对象,如图像、文本等。 - BOOLEAN:在Oracle中没有原生的布尔类型,通常用1和0或Y/N表示。 三、权限管理 Oracle提供了GRANT和REVOKE命令来授予和回收用户的数据库权限。用户可以通过角色...

    oracle培训公司笔记1

    - **Linux**:一种免费使用的类Unix操作系统,是Oracle等数据库运行的重要平台之一。 - 学习目标:熟悉一个特定的Linux发行版(如Ubuntu或CentOS),为后续的学习打下坚实的基础。 #### 4. .NET与Oracle - **.NET**...

    Oracle学习笔记

    这篇学习笔记主要涵盖了Oracle中用户管理、数据类型、表的约束以及数据库备份和SQL操作符等核心概念。 首先,用户管理是数据库系统的重要组成部分。在Oracle中,创建新用户的基本语法是`CREATE USER`,例如`CREATE ...

    oracle学习笔记

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级应用中占据着核心地位。这篇"Oracle学习笔记"涵盖了数据库的基本操作、SQL查询以及优化技巧,是学习Oracle数据库的重要参考资料。 1. 数据库概念...

    oracle课堂笔记

    ### Oracle课堂笔记知识点总结 #### Oracle数据库概述 - **Oracle** 是一款由Oracle公司开发的关系型数据库管理系统(RDBMS)。自Oracle 8版本开始,它支持互联网技术,并且不断推出新版本,如Oracle 8i(Internet...

    oracle笔记

    在数据类型方面,Oracle提供了多种数据类型,包括字符型如`CHAR`和`VARCHAR2`,数字型如`NUMBER`,日期类型`DATE`,以及大对象类型如`CLOB`(字符型)和`BLOB`(二进制数据)。`NUMBER(5,2)`定义了一个有5位有效数字...

    Oracle数据库知识笔记汇总1

    在数据类型方面,Oracle支持多种类型,如`VARCHAR2`(变长字符串)、`NUMBER`(整数或浮点数)、`DATE`(日期)、`CLOB`(大对象,用于存储大文本)和`BLOB`(大对象,用于存储二进制数据)。 总的来说,Oracle...

Global site tag (gtag.js) - Google Analytics