Oracle和plsql都支持lob(large object) 类型,用来存储大数量数据,如图像文件,声音文件等。Oracle 9i realse2支持存储最大为4g的数据,oracle 10g realse1支持最大8到128万亿字节的数据存储,依赖于你的db的block size。
在plsql中可以申明的lob类型的变量如下:
BFILE 二进制文件,存储在数据库外的操作系统文件,只读的。把此文件当二进制处理。
BLOB 二进制大对象。存储在数据库里的大对象,一般是图像声音等文件。
CLOB 字符型大对象。一般存储大数量文本信息。存储单字节,固定宽度的数据。
NCLOB 字节字符大对象。存储单字节大块,多字节固定宽度,多字节变宽度数据。
Oracle将lob分类为两种:
1.存储在数据库里的,参与数据库的事务。BLOB,CLOB,NCCLOB。
2.存储在数据库外的BFILE,不参与数据库的事务,也就是不能rollback或commit等,它依赖于文件系统的数据完整性。
模拟插入更新.....
SQL
>
create
table
testlob(
2
id
integer
,
3
content blob);
表已创建。
SQL
>
create
sequence seq_ad_id start
with
1
2
maxvalue
999999999999
3
nocycle;
序列已创建。
SQL
>
insert
into
testlob
values
(seq_ad_id.nextval,utl_raw.cast_to_raw(
'
我考
'
));
已创建
1
行。
SQL
>
commit
;
提交完成。
SQL
>
SQL
>
select
id,utl_raw.cast_to_varchar2(content)
from
testlob;
ID
--
--------
UTL_RAW.CAST_TO_VARCHAR2(CONTENT)
--
------------------------------------------------------------------------------
3
我考
这里使用了utl_raw的两个过程utl_raw.cast_to_raw()和cast_to_varchar2()来插入查询blob字段数据
对于clob和nclob类型,可以通过to_char()来查询
测试将外部文件插入BLOB。
连接到:
Oracle
Database
10g Enterprise Edition Release
10.2
.
0.1
.
0
-
Production
With
the Partitioning, OLAP
and
Data Mining options
SQL
>
CREATE
OR
REPLACE
PROCEDURE
insert_blob(p_filename
varchar2
)
IS
2
i_blob BLOB;
3
i_file BFILE :
=
BFILENAME(
'
UTL_DIR
'
,p_filename);
4
BEGIN
5
INSERT
INTO
testlob (a)
VALUES
(EMPTY_BLOB())
6
RETURNING a
INTO
i_blob;
7
8
DBMS_LOB.FILEOPEN(i_file);
9
DBMS_LOB.LOADFROMFILE(i_blob, i_file, DBMS_LOB.GETLENGTH(i_file));
10
DBMS_LOB.FILECLOSE(i_file);
11
12
COMMIT
;
13
END
;
14
/
过程已创建。
SQL
>
create
or
replace
directory utl_dir
as
'
E:\oracle\oracle10g
'
;
目录已创建。
SQL
>
SQL
>
grant
read
,write
on
directory utl_dir
to
public
;
授权成功。
SQL
>
exec
insert_blob(
'
第 10 章:监控和调整数据库.pdf
'
);
PL
/
SQL 过程已成功完成。
SQL
>
SELECT
DBMS_LOB.GETLENGTH(a)
from
testlob;
DBMS_LOB.GETLENGTH(A)
--
-------------------
4
2020742
4872578
SQL
>
使用 DBMS_LOB.GETLENGTH(a) 来验证插入数否成功