使用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())
RETURNINGfINTOdst_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
TAB2TABLE.0625
IIHERO_BLOBTABLE.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_bufferRAW(32767);
l_amountBINARY_INTEGER:=32767;
l_posINTEGER:=1;
l_blobBLOB;
l_blob_lenINTEGER;
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...
5. 数据类型:介绍Oracle支持的各种数据类型,如NUMBER、VARCHAR2、DATE、BLOB、CLOB等,以及它们的适用场景。 6. 视图与索引:视图是虚拟表,用于提供数据的不同视角;索引则可以加速查询性能。笔记可能会详细解释...
在提供的内容片段中,可以提炼出以下Oracle相关知识点: 1. 数据类型说明: - VARCHAR2(n):可变长度字符串,最多存储n个字符。 - NUMBER(n):数字类型,可以指定总位数和小数位数。 - DATE:日期类型,用于存储...
第八章 函数:这部分涵盖了Oracle数据库内置的函数,如数学函数、字符串函数、日期时间函数等,以及如何在SQL查询中使用这些函数。 第九章 束缚:束缚或约束是数据库中确保数据完整性的机制,包括唯一性约束、非空...
以上只是Oracle数据库知识体系的冰山一角,Oracle笔记中可能涵盖了这些内容的详细解释和实例演示,对于学习和理解Oracle数据库的操作和管理非常有帮助。在实际工作中,掌握这些知识能够帮助数据库管理员和开发者更...
### 精通Oracle 10g PL/SQL编程学习笔记 #### 一、PL/SQL综述 **1.1 PL/SQL的功能与作用** PL/SQL (Procedural Language for SQL) 是一种专门为Oracle数据库设计的过程化语言,它结合了SQL的数据处理能力与过程化...
Oracle支持多种数据类型,包括数值类型(如NUMBER、INTEGER)、字符串类型(如VARCHAR2、CHAR)、日期时间类型(如DATE)、二进制数据类型(如BLOB、CLOB)等。选择合适的数据类型对于存储和处理数据至关重要。 四...
Oracle支持多种数据类型,包括数值类型(如NUMBER、INTEGER)、字符类型(VARCHAR2、CHAR)、日期时间类型(DATE、TIMESTAMP)、二进制数据类型(BLOB、CLOB)等,可以根据实际需求选择合适的数据类型存储数据。...
Oracle还支持其他复杂的数据类型,如CLOB(用于存储大文本数据)和BLOB(用于存储大二进制数据)。 8. Oracle错误代码: 文档中出现了一个错误代码ORA-00942,这表示在执行SQL语句时,因为某种原因,数据库无法识别...
5. **数据类型**:Oracle提供了丰富的数据类型,如CHAR、VARCHAR2、NUMBER、DATE、CLOB、BLOB等,用于存储不同类型的数据。 6. **表的设计**:在设计表时,需考虑字段的主键、外键、索引、约束等,以确保数据的一致...
- BLOB、CLOB:用于存储大对象,如图像、文本等。 - BOOLEAN:在Oracle中没有原生的布尔类型,通常用1和0或Y/N表示。 三、权限管理 Oracle提供了GRANT和REVOKE命令来授予和回收用户的数据库权限。用户可以通过角色...
- **Linux**:一种免费使用的类Unix操作系统,是Oracle等数据库运行的重要平台之一。 - 学习目标:熟悉一个特定的Linux发行版(如Ubuntu或CentOS),为后续的学习打下坚实的基础。 #### 4. .NET与Oracle - **.NET**...
这篇学习笔记主要涵盖了Oracle中用户管理、数据类型、表的约束以及数据库备份和SQL操作符等核心概念。 首先,用户管理是数据库系统的重要组成部分。在Oracle中,创建新用户的基本语法是`CREATE USER`,例如`CREATE ...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级应用中占据着核心地位。这篇"Oracle学习笔记"涵盖了数据库的基本操作、SQL查询以及优化技巧,是学习Oracle数据库的重要参考资料。 1. 数据库概念...
### Oracle课堂笔记知识点总结 #### Oracle数据库概述 - **Oracle** 是一款由Oracle公司开发的关系型数据库管理系统(RDBMS)。自Oracle 8版本开始,它支持互联网技术,并且不断推出新版本,如Oracle 8i(Internet...
在数据类型方面,Oracle提供了多种数据类型,包括字符型如`CHAR`和`VARCHAR2`,数字型如`NUMBER`,日期类型`DATE`,以及大对象类型如`CLOB`(字符型)和`BLOB`(二进制数据)。`NUMBER(5,2)`定义了一个有5位有效数字...
在数据类型方面,Oracle支持多种类型,如`VARCHAR2`(变长字符串)、`NUMBER`(整数或浮点数)、`DATE`(日期)、`CLOB`(大对象,用于存储大文本)和`BLOB`(大对象,用于存储二进制数据)。 总的来说,Oracle...