一、理解什么是LOB定位器和LOB数据
LOB数据是我们存入到数据库中的值,而LOB 定位器 是操作这些值的指针。当我们想读取或者修改LOB数据时,我们必须先要获取LOB 定位器 ,然后通过LOB定位器才能读取或者修改LOB数据,下面的示例能够帮助我们更好的理解LOB数据和LOB定位器:
DECLARE
picLOB BLOB;
BEGIN
--假定 picColumn列是BLOB类型
SELECT picColumn INTO picLOB FROM myTable WHERE ID=10;
END;
当SELECT INTO语句执行完之后, picLOB变量将被赋值,但是 picLOB变量的值不是LOB数据,而是LOB数据的定位器。要想获取LOB数据,我们必须对定位器进行操作,Oracle中DBMS_LOB包里的很多函数和过程都可以对定位器进行操作,如下:
APPEND(): 将源LOB中的内容加到目的LOB中
COPY() :从源LOB中复制数据到目的LOB
ERASE(): 删除LOB中全部或部分内容
TRIM(): 将LOB值减少到指定的长度
WRITE(): 向LOB 中写入数据
COMPARE(): 比较两个同种数据类型的LOB的部分或全部值是否相同
GETLENGTH(): 获取LOB的长度
READ(): 从LOB中读出数据
二、使用CLOB数据类型
示例1:创建带有CLOB数据类型的表,并插入数据
CREATE TABLE CLOB_TABLE
(
id NUMBER(3) PRIMARY KEY,
remark CLOB --remark:备注
);
INSERT INTO CLOB_TABLE(id) VALUES(1); --remark列没有定位器,并且没有数据
INSERT INTO CLOB_TABLE VALUES(2,'ID为2的备注信息'); --remark列有定位器,并且有数据
INSERT INTO CLOB_TABLE VALUES(3,empty_clob());--remark含有定位器,但是没有数据
检索定位器的值:
DECLARE
myLob CLOB;
BEGIN
SELECT remark INTO myLob FROM CLOB_TABLE WHERE id=___ ;
IF myLob IS NULL THEN
DBMS_OUTPUT.PUT_LINE('myLob IS NULL ');
ELSE
DBMS_OUTPUT.PUT_LINE(myLob );
END IF;
END;
当下划线填入1时,结果如下:
myLob IS NULL
当下划线填入2时,结果如下:--打印出定位器所指向的数据
ID为2的备注信息
当下划线填入3时,没有打印出信息。
修改id为1的remark列,使其具有定位器:
UPDATE CLOB_TABLE SET remark=empty_clob() WHERE id=1;
这时再调用以上的代码块,这次没有打印出信息。
ocm培训
阅读(3100) | 评论(0) | 转发(0) |