一、向CLOB列追加数据
DECLARE
myLob CLOB;
buffer VARCHAR2(20) := '这是第一次追加的内容';
amount INT;
offset INT;
BEGIN
--要想能够修改LOB数据,必须指定FOR UPDATE子句
SELECT remark INTO myLob FROM CLOB_TABLE WHERE id=2 FOR UPDATE ;
amount:=LENGTH( buffer ); --获取追加文本的长度
offset:=DBMS_LOB.GETLENGTH (myLob)+1; --获取定位器引用的LOB数据的 长度
DBMS_LOB.WRITE (myLob,amount,offset, buffer );-- 向CLOB列追加数据,每次最大追加32767字节。要注意必须先存在定位器才能追加数据,否则会出现invalid LOB locator specified: ORA-22275错误。
--DBMS_LOB.WRITEAPPEND(myLob,amount, buffer );--使用这个函数不用考虑offset参数
END;
二、读取CLOB数据
DECLARE
myLob CLOB;
text VARCHAR2(40);
amount INT;
offset INT;
BEGIN
SELECT remark INTO myLob FROM CLOB_TABLE WHERE id=2;
amount:=15;
offset:=3;
--从LOB数据中的第三个字符开始读取共读取15个字符放入到text变量
DBMS_LOB.READ(myLob,amount,offset,text);
DBMS_OUTPUT.PUT_LINE(text);
END;
三、使用BFile数据类型
BFile类型不存放文件实际数据,而是存放文件的指针,文件的数据存储在操作系统的文件系统上,并且我们只能通过BFile类型读取文件的数据,不能修改。
示例1:创建ScottDir目录,并授予scott用户读权限
CREATE DIRECTORY ScottDir AS 'E:\ScottDir'; --注意此语句并不会在操作系统上创建文件夹
GRANT READ ON DIRECTORY ScottDir TO scott;
示例2:创建含有BFile数据类型的列,并插入数据
CREATE TABLE BFILE_TABLE
(
id NUMBER PRIMARY KEY,
remark BFILE
);
插入数据:
INSERT INTO BFILE_TABLE(id) VALUES(1);
UPDATE BFILE_TABLE SET remark=BFILENAME('SCOTTDIR ','1.txt') ;
INSERT INTO BFILE_TABLE(id,remark) VALUES(2,BFILENAME(' SCOTTDIR ','2.doc') );
注意:BFILE数据类型指向的文件,即可以是文本文件也可以是二进制文件。而且BFILE数据类型不能通过SELECT语句直接查看其内容。
示例3:将BFile文件的内容读取到CLOB列(前提是BFile文件是文本文件)
DECLARE
src BFILE;
des CLOB;
amount INT;
src_offset INT :=1;
des_offset INT :=1;
csid INT :=850;
lc INT :=0;
warning INT;
BEGIN
SELECT remark INTO src FROM BFile_TABLE WHERE id=1;
SELECT remark INTO des FROM CLOB_TABLE WHERE id=1 FOR UPDATE ;
DBMS_LOB.FILEOPEN(src,DBMS_LOB.FILE_READONLY);
amount:=DBMS_LOB.GETLENGTH(src);
DBMS_OUTPUT.PUT_LINE(amount);
DBMS_LOB.LOADCLOBFROMFILE (des,src,amount,des_offset,src_offset,csid,lc,warning);
DBMS_LOB.CLOSE(src);
END;
本文转自cuug官网。
阅读(4312) | 评论(0) | 转发(0) |