在当今网络时代,我们对数据的存储是越来越高,仅仅存储小型文本数据已经远远不够了,现在数据库需要存储图片、视频等等一些多媒体的内容,因此Oracle给我们提供了一种大类型数据库对象LOB(Large Object),可以用于存储大型数据。
一、大对象的4中数据类型
CLOB 字符LOB数据类型,用于存储字符数据类型
NCLOB 国家语言字符LOB数据类型,用于存储多字节多字符数据类型
BLOB 二进制LOB数据类型,用于存储二进制数据
BFILE 二进制FILE类型,用于存储文件指针,有时候,数据文件本身存储在数据库之外,而在数据库中之存储该文件的引用
二、大对象的优点
LOB与较早的类型相比,具有下面3个优点
1、LOB最大可以存储128TB的数据、这远远超过LONG和LONG RAW累的存储数量(2GB)
2、一个表可以有多个LOB、但是一个表只能有一个LONG和LONG RAW
3、LOB可以随机访问、LONG和LONG RAW只能顺序访问
三、大对象的组成部分
LOB主要由两部分组成
LOB定位器:一个指针指向LOB数据的位置
LOB数据:存储在LOB中的实际数据
LOB数据并不一定存储在表中,如果CLOB、BLOB、NCLOB列中的数据小于4KB则LOB数据存在于表中,否存于表外。
至于BFILE列支存储LOB定位器存在于表中。
四、应用
1、更新CLOB字段或者是往该类型字段插入数据的时候要用to_clob('这是CLOB字段类型')进行转换
添加后的数据为01111111101011101,oracle会默认在前面加一个0,但是大小是不变的。
ORACLE还提供哦你一个包,包中有好多的方法,这些方法可以方便我们更好的操作对象。
DBMS_LOB.APPEND(dest_lob,src_lob)用于将原LOB中的数据添加到目标LOB末尾,该方法分别针对BLOB、CLOB和NCLOB。
APPEND(追加)方法,我们创建一个存储过程的例子:
CREATE OR REPLACT PROCEDURE append_test AS
dest_lob CLOB;
src_lob CLOB;
GEGIN
SELECT CLOB_COLUMN INTO dest_lob FROM COLB_TABLE WHERE ID=1
FOR UPDATE;
SELECT CLOB_COLUMN INTO src_lob FROM COLB_TABLE WHERE ID=2
FOR UPDATE;
DBMS_LOB.APPEND(dest_lob,src_lob);
END append_test;
EXEC ROCEDURE(执行存储过程就把第二行的数据追加到第一行末尾了)
COMPARE(比较)方法,我们创建一个存储过程的例子:
return_value := DBMS_LOB.COMPARE(dest_lob,src_lob,amount,offset1,offset2);
DBMS_OUTPUT.PUT_LINK(’比较结果' || return_value)
END compase_test;
EPASE(删除)方法,我们创建一个存储过程的例子:
DBMS_LOB.COMPARE(dest_lob,amount,offset1);
CREATE OR REPLACT PROCEDURE epase_test AS
dest_lob CLOB;
offset1 INTEGER := 1;
amount INTEGER := 3;
return_value INTEGER
GEGIN
SELECT CLOB_COLUMN INTO dest_lob FROM COLB_TABLE WHERE ID=1
FOR UPDATE;
END epase_test;
CREATE OR REPLACT PROCEDURE compare_test AS
dest_lob CLOB;
src_lob CLOB;
offset1 INTEGER := 1;
offset2 INTEGER := 1;
amount INTEGER := 5;
return_value INTEGER
GEGIN
SELECT CLOB_COLUMN INTO dest_lob FROM COLB_TABLE WHERE ID=1
FOR UPDATE;
SELECT CLOB_COLUMN INTO src_lob FROM COLB_TABLE WHERE ID=2
FOR UPDATE;
2、更新BLOB字段或者是往该类型字段插入数据的时候要用to_blob('1111111101011101‘)进行转换,