DBE_LOB
接口介绍
高级功能包DBE_LOB支持的所有接口参见表1。
接口名称 |
描述 |
---|---|
获取并返回指定的LOB类型对象的长度。 |
|
打开一个LOB返回一个LOB的描述符。 |
|
根据指定的长度及起始位置偏移读取LOB内容的一部分到BUFFER缓冲区。 |
|
根据指定长度及起始位置偏移将BUFFER中内容写入到LOB中。 |
|
根据指定长度将BUFFER中内容写入到LOB的尾部。 |
|
根据指定长度及起始位置偏移将BLOB内容写入到另一个BLOB中。 |
|
根据指定长度及起始位置偏移删除BLOB中的内容。 |
|
关闭已经打开的LOB描述符。 |
|
返回一个字符串在LOB中第N次出现的位置。 |
|
比较两个LOB或者两个LOB的某一部分。 |
|
用于读取一个LOB的子串,返回读取的字节个数或者字符个数。 |
|
用于截断指定长度的LOB,执行完会将LOB的长度设置为参数指定的长度。 |
|
创建一个临时的BLOB或者CLOB对象。 |
|
将源LOB的内容拼接到目的LOB中。 |
|
删除一个临时的BLOB或者CLOB对象。 |
|
打开一个数据库外部文件,并返回文件表述符。 |
|
关闭由FILEOPEN打开的外部文件。 |
|
读取数据库外部文件到BLOB文件中。 |
|
读取数据库外部文件到BLOB文件中。 |
|
读取数据库外部文件到CLOB文件中。 |
|
将CLOB类型文件转换为BLOB类型文件。 |
|
将BLOB类型文件转换为CLOB类型文件。 |
- DBE_LOB.GET_LENGTH
存储过程GET_LENGTH获取并返回指定的LOB类型对象的长度,最大支持2GB。
DBE_LOB.GET_LENGTH函数原型为:
1 2 3 4 5 6 7
DBE_LOB.GET_LENGTH ( lob IN BLOB) RETURN INTEGER; DBE_LOB.GET_LENGTH ( lob IN CLOB) RETURN INTEGER;
表2 DBE_LOB.GET_LENGTH接口参数说明 参数
描述
lob
待获取长度的BLOB/CLOB类型对象。
- DBE_LOB.OPEN
存储过程打开一个LOB,并返回一个LOB描述符,该过程无实际意义,仅用于兼容。
DBE_LOB.OPEN函数原型为:
1 2 3 4 5 6 7 8 9 10 11 12
DBE_LOB.OPEN ( lob INOUT BLOB ); DBE_LOB.OPEN ( lob INOUT CLOB ); DBE_LOB.OPEN ( bfile dbe_lob.bfile, open_mode text DEFAULT 'null'::text );
表3 DBE_LOB.OPEN接口参数说明 参数
描述
lob
被打开的BLOB或者CLOB对象。
- DBE_LOB.READ
存储过程READ根据指定长度及起始位置偏移读取LOB内容的一部分到BUFFER缓冲区。
DBE_LOB.READ函数原型为:
1 2 3 4 5 6 7 8 9 10 11
DBE_LOB.READ ( lob IN BLOB, len IN INTEGER, start IN INTEGER, buffer OUT RAW); DBE_LOB.READ ( lob IN CLOB, len INOUT INTEGER, start IN INTEGER, buffer OUT VARCHAR2);
表4 DBE_LOB.READ接口参数说明 参数
说明
lob
待读入的BLOB/CLOB类型对象。
len
读入长度,最大支持32767字符。
说明:如果读入长度为负,会收到错误提示“ERROR: argument 2 is null, invalid, or out of range.”
start
指定从LOB内容的哪个位置开始读取的偏移(即相对LOB内容起始位置的字节数)。
buffer
读取LOB内容后存放的目标缓冲区。
其中,lob支持超过1GB的clob类型,最大支持2GB,buffer最大支持32k,不能大于len的长度。
- DBE_LOB.WRITE
存储过程WRITE根据指定长度及起始位置将BUFFER中内容写入到LOB变量中。
DBE_LOB.WRITE函数原型为:
1 2 3 4 5 6 7 8 9 10 11
DBE_LOB.WRITE ( dest_lob INOUT BLOB, len IN INTEGER, start IN INTEGER, src_lob IN RAW); DBE_LOB.WRITE ( dest_lob INOUT CLOB, len IN INTEGER, start IN INTEGER, src_lob IN VARCHAR2);
表5 DBE_LOB.WRITE接口参数说明 参数
说明
dest_lob
待写入的BLOB/CLOB类型对象。
len
写入长度,最大支持32767字符。
说明:如果写入长度小于1或写入长度大于待写入的内容长度,则报错。
start
指定从LOB内容的哪个位置开始写入的偏移(即相对LOB内容起始位置的字节数)。
说明:如果偏移量小于1,则报错;如果偏移量大于LOB类型最大长度时,不会报错。
src_lob
待写入的内容。
其中,dest_lob支持超过1GB的clob类型,最大支持2GB,src_lob最大支持1GB,不能超过1GB。
- DBE_LOB.WRITE_APPEND
存储过程WRITE_APPEND根据指定长度将BUFFER中内容写入到LOB的尾部。
DBE_LOB.WRITE_APPEND函数原型为:
1 2 3 4 5 6 7 8 9
DBE_LOB.WRITE_APPEND ( dest_lob INOUT BLOB, len IN INTEGER, src_lob IN RAW); DBE_LOB.WRITE_APPEND ( dest_lob INOUT CLOB, len IN INTEGER, src_lob IN VARCHAR2);
表6 DBE_LOB.WRITE_APPEND接口参数说明 参数
说明
dest_lob
待写入的指定BLOB/CLOB类型对象。
len
写入长度,最大支持32767字符。
说明:如果写入长度小于1或写入长度大于待写入的内容长度,则报错。
src_lob
待写入的内容。
- DBE_LOB.COPY
存储过程COPY根据指定长度及起始位置偏移将BLOB内容拷贝到另一个BLOB中。
DBE_LOB.COPY函数原型为:
1 2 3 4 5 6
DBE_LOB.COPY ( dest_lob INOUT BLOB, src_lob IN BLOB, len IN INTEGER, dest_start IN INTEGER DEFAULT 1, src_start IN INTEGER DEFAULT 1);
表7 DBE_LOB.COPY接口参数说明 参数
说明
dest_lob
待拷入的BLOB类型对象。
src_lob
待拷出的BLOB类型对象。
len
拷贝长度。
说明:如果拷入长度小于1或拷入长度大于BLOB类型最大长度,则报错。
dest_start
指定从BLOB内容的哪个位置开始拷入的偏移(即相对BLOB内容起始位置的字节数)。
说明:如果偏移量小于1或偏移量大于BLOB类型最大长度,则报错。
src_start
指定从BLOB内容的哪个位置开始拷出的偏移(即相对BLOB内容起始位置的字节数)。
说明:如果偏移量小于1或偏移量大于拷贝来源BLOB的长度,则报错。
- DBE_LOB.ERASE
存储过程ERASE根据指定长度及起始位置偏移删除BLOB中的内容。
DBE_LOB.ERASE函数原型为:
1 2 3 4
DBE_LOB.ERASE ( lob INOUT BLOB, len INOUT INTEGER, start IN INTEGER DEFAULT 1);
表8 DBE_LOB.ERASE接口参数说明 参数
说明
lob
待删除内容的BLOB类型对象。
len
待删除的长度。
说明:如果删除长度小于1或删除长度大于BLOB类型最大长度,则报错。
start
指定从BLOB内容的哪个位置开始删除的偏移(即相对BLOB内容起始位置的字节数)。
说明:如果偏移量小于1或偏移量大于BLOB类型最大长度,则报错。
- DBE_LOB.CLOSE
DBE_LOB.CLOSE函数原型为:
1 2 3 4 5 6 7 8
DBE_LOB.CLOSE( lob IN BLOB); DBE_LOB.CLOSE ( lob IN CLOB); DBE_LOB.CLOSE ( file IN INTEGER);
表9 DBE_LOB.CLOSE接口参数说明 参数
说明
lob
待关闭的BLOB/CLOB类型对象。
- DBE_LOB.MATCH
该函数返回pattern在LOB中第N次出现的位置,如果输入的是一些无效值会返回NULL值。offset < 1 or offset > LOBMAXSIZE,nth < 1,nth > LOBMAXSIZE。
DBE_LOB.MATCH函数原型为:
1 2 3 4 5 6 7 8 9 10 11 12 13
DBE_LOB.MATCH ( lob IN BLOB, pattern IN RAW, start_index IN INTEGER DEFAULT 1, match_index IN INTEGER DEFAULT 1) RETURN INTEGER; DBE_LOB.MATCH ( lob IN CLOB, pattern IN VARCHAR2 , start_index IN INTEGER DEFAULT 1, match_index IN INTEGER DEFAULT 1) RETURN INTEGER;
表10 DBE_LOB.match接口参数说明 参数
说明
lob
要查找的BLOB/CLOB描述符。
pattern
要匹配的模式,对于BLOB是由一组RAW类型的数据组成,对于CLOB是由一组text类型的数据组成。
start_index
对于BLOB是以字节为单位的绝对偏移量,对于CLOB是以字符为单位的偏移量,模式匹配的起始位置是1。
match_index
模式匹配的次数,最小值为1。
- DBE_LOB.COMPARE
- 如果比较的结果相等返回0,否则返回非零的值。
- 如果第一个LOB比第二个小,返回-1;如果第一个LOB比第二个大,返回1。
- 如果len,start1,start2这几个参数有无效参数返回NULL,有效的偏移量范围是1~LOBMAXSIZE。
DBE_LOB.COMPARE函数原型为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
DBE_LOB.COMPARE ( lob1 IN BLOB, lob2 IN BLOB, len IN INTEGER DEFAULT DBE_LOB.LOBMAXSIZE, start1 IN INTEGER DEFAULT 1, start2 IN INTEGER DEFAULT 1) RETURN INTEGER; DBE_LOB.COMPARE ( lob1 IN CLOB, lob2 IN CLOB, len IN INTEGER DEFAULT DBE_LOB.LOBMAXSIZE, start1 IN INTEGER DEFAULT 1, start2 IN INTEGER DEFAULT 1) RETURN INTEGER;
表11 DBE_LOB.COMPARE接口参数说明 参数
说明
lob1
第一个要比较的BLOB/CLOB类型对象。
lob2
第二个要比较的BLOB/CLOB类型对象。
len
要比较的字符数或者字节数,最大值为DBE_LOB.LOBMAXSIZE。
start1
第一个LOB描述符的偏移量,初始位置是1。
start2
第二个LOB描述符的偏移量,初始位置是1。
- DBE_LOB.SUBSTR
用于读取一个LOB的子串,返回读取的字节个数或者字符个数,amount <1或者amount >32767,offset < 1或者offset > LOBMAXSIZE的时候返回值是NULL。
DBE_LOB.SUBSTR函数原型为:
1 2 3 4 5 6 7 8 9 10 11
DBE_LOB.SUBSTR ( lob IN BLOB, len IN INTEGER DEFAULT 32767, start IN INTEGER DEFAULT 1) RETURN RAW; DBE_LOB.SUBSTR ( lob IN CLOB, len IN INTEGER DEFAULT 32767, start IN INTEGER DEFAULT 1) RETURN VARCHAR2;
表12 DBE_LOB.SUBSTR接口参数说明 参数
说明
lob
将要读取子串的LOB描述符,对于BLOB类型的返回值是读取的字节个数,对于CLOB类型的返回值是字符个数。
len
要读取的字节数或者字符数量。
start
从开始位置偏移的字符数或者字节数量。
- DBE_LOB.STRIP
这个存储过程用于截断指定长度的LOB,执行完这个存储过程会将LOB的长度设置为newlen参数指定的长度。如果对一个空的LOB执行截断操作,不会有任何执行结果;如果指定的长度比LOB的长度长,会产生一个异常。
DBE_LOB.STRIP函数原型为:
1 2 3 4 5 6 7
DBE_LOB.STRIP ( lob IN OUT BLOB, newlen IN INTEGER); DBE_LOB.STRIP ( lob IN OUT CLOB, newlen IN INTEGER);
表13 DBE_LOB.STRIP接口参数说明 参数
说明
lob
待读入的指定BLOB类型对象。
newlen
截断后LOB的新长度,对于BLOB是字节数,对于CLOB是字符数。
- DBE_LOB.CREATE_TEMPORARY
这个存储过程创建一个临时的BLOB或者CLOB,这个存储过程仅用于语法上的兼容,并无实际意义。
DBE_LOB.CREATE_TEMPORARY函数原型为:
1 2 3 4 5 6 7 8 9
DBE_LOB.CREATE_TEMPORARY ( locator INOUT BLOB, cache IN BOOLEAN, keep_alive_time IN INTEGER); DBE_LOB.CREATE_TEMPORARY ( locator INOUT CLOB, cache IN BOOLEAN, keep_alive_time IN INTEGER);
表14 DBE_LOB.CREATE_TEMPORARY接口参数说明 参数
说明
locator
LOB描述符。
cache
仅用于语法上的兼容。
keep_alive_time
仅用于语法上的兼容。
- DBE_LOB.APPEND
存储过程APPEND根据指定长度及起始位置偏移读取BLOB内容的一部分到BUFFER缓冲区。
DBE_LOB.APPEND函数原型为:
1 2 3 4 5 6 7
DBE_LOB.APPEND ( dest_lob INOUT BLOB, src_lob IN BLOB); DBE_LOB.APPEND ( dest_lob INOUT CLOB, src_lob IN CLOB);
表15 DBE_LOB.APPEND接口参数说明 参数
说明
dest_lob
要写入的BLOB/CLOB对象。
src_lob
读取的BLOB/CLOB对象。
其中,dest_lob支持超过1GB的clob类型,最大支持2GB,src_lob最大支持1GB,不能超过1GB。
- DBE_LOB.FREETEMPORARY
存储过程用于释放由CREATE_TEMPORARY创建的LOB文件。
DBE_LOB.FREETEMPORARY函数原型为:
1 2 3 4 5
DBE_LOB.FREETEMPORARY ( lob_loc INOUT BLOB); DBE_LOB.FREETEMPORARY ( lob_loc INOUT CLOB);
表16 DBE_LOB.FREETEMPORARY接口参数说明 参数
说明
lob_loc
要释放的BLOB/CLOB对象。
- DBE_LOB.FILEOPEN
这个函数用于打开数据库外部BFILE类型文件,并返回这个文件对用的文件描述符(fd)。
BFILE类型定义为:
1 2 3
DBE_LOB.BFILE ( directory text, filename text);
DBE_LOB.FILEOPEN函数原型为:
1 2 3 4
DBE_LOB.FILEOPEN ( file IN DBE_LOB.BFILE, open_mode IN text) RETURN integer;
表17 DBE_LOB.FILEOPEN接口参数说明 参数
说明
file
要打开的数据库外部文件(BFILE类型包含了文件路径和文件名)。
open_mode
文件打开模式(w、r、a)。
- DBE_LOB.FILECLOSE
DBE_LOB.FILECLOSE函数原型为:
1 2
DBE_LOB.FILECLOSE ( file IN integer);
表18 DBE_LOB.FILECLOSE接口参数说明 参数
说明
file
要关闭的数据库外部文件(由FILEOPEN返回的文件描述符)。
- DBE_LOB.LOADFROMFILE
DBE_LOB.LOADFROMFILE函数原型为:
1 2 3 4 5 6 7
DBE_LOB.LOADFROMFILE ( dest_lob IN BLOB, src_file IN INTEGER, amount IN INTEGER, dest_offset IN INTEGER, src_offset IN INTEGER) RETURN raw;
表19 DBE_LOB.LOADFROMFILE接口参数说明 参数
说明
dest_lob
目标blob文件,bfile文件将读取到这个文件中。
src_bfile
需要读取的源bfile文件。
amount
blob文件的长度,超过这个阈值的文件将不会保存到blob中。
dest_offset
blob文件的偏移长度,dest_offset=1将从文件起始位置开始载入,以此类推。
src_offset
bfile文件的偏移长度,src_offset=1将从文件起始位置开始读取,以此类推。
可以导入文件的大小可以超过1GB,amount的最大值为LOBMAXSIZE(4GB),当src_offset或者dest_offset > LOBMAXSIZE,以及amount > LOBMAXSIZE时,高级包会报错。
- DBE_LOB.LOADBLOBFROMFILE
DBE_LOB.LOADBLOBFROMFILE函数原型为:
1 2 3 4 5 6 7
DBE_LOB.LOADBLOBFROMFILE ( dest_lob IN BLOB, src_file IN INTEGER, amount IN INTEGER, dest_offset IN INTEGER, src_offset IN INTEGER) RETURN raw;
表20 DBE_LOB.LOADBLOBFROMFILE接口参数说明 参数
说明
dest_lob
目标blob文件,bfile文件将读取到这个文件中。
src_bfile
需要读取的源bfile文件。
amount
blob文件的长度,超过这个阈值的文件将不会保存到blob中。
dest_offset
blob文件的偏移长度,dest_offset=1将从文件起始位置开始载入,以此类推。
src_offset
bfile文件的偏移长度,src_offset=1将从文件起始位置开始读取,以此类推。
- DBE_LOB.LOADCLOBFROMFILE
DBE_LOB.LOADCLOBFROMFILE函数原型为:
1 2 3 4 5 6 7
DBE_LOB.LOADCLOBFROMFILE ( dest_lob IN CLOB, src_file IN INTEGER, amount IN INTEGER, dest_offset IN INTEGER, src_offset IN INTEGER) RETURN raw;
表21 DBE_LOB.LOADCLOBFROMFILE接口参数说明 参数
说明
dest_lob
目标clob文件,bfile文件将读取到这个文件中。
src_bfile
需要读取的源bfile文件。
amount
clob文件的长度,超过这个阈值的文件将不会保存到clob中。
dest_offset
clob文件的偏移长度,dest_offset=1将从文件起始位置开始载入,以此类推。
src_offset
bfile文件的偏移长度,src_offset=1将从文件起始位置开始读取,以此类推。
- DBE_LOB.CONVERTTOBLOB
DBE_LOB.CONVERTTOBLOB函数原型为:
1 2 3 4 5 6 7
DBE_LOB.CONVERTTOBLOB( dest_blob IN BLOB, src_clob IN CLOB, amount IN INTEGER default 32767, dest_offset IN INTEGER default 1, src_offset IN INTEGER default 1) RETURN raw;
表22 DBE_LOB.CONVERTTOBLOB接口参数说明 参数
说明
dest_lob
目标blob文件,clob转换后的文件。
src_bfile
需要读取的源clob文件。
amount
blob文件的长度,超过这个阈值的文件将不会保存到blob中。
dest_offset
blob文件的偏移长度,dest_offset=1将从文件起始位置开始载入,以此类推。
src_offset
clob文件的偏移长度,src_offset=1将从文件起始位置开始读取,以此类推。
- DBE_LOB.CONVERTTOCLOB
DBE_LOB.CONVERTTOCLOB函数原型为:
1 2 3 4 5 6 7
DBE_LOB.CONVERTTOCLOB( dest_clob IN CLOB, src_blob IN BLOB, amount IN INTEGER default 32767, dest_offset IN INTEGER default 1, src_offset IN INTEGER default 1) RETURN text;
表23 DBE_LOB.CONVERTTOCLOB接口参数说明 参数
说明
dest_lob
目标clob文件,blob转换后的文件。
src_bfile
需要读取的源blob文件。
amount
clob文件的长度,超过这个阈值的文件将不会保存到clob中。
dest_offset
clob文件的偏移长度,dest_offset=1将从文件起始位置开始载入,以此类推。
src_offset
blob文件的偏移长度,src_offset=1将从文件起始位置开始读取,以此类推。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
--获取字符串的长度 SELECT DBE_LOB.GET_LENGTH('12345678'); get_length ------------ 8 (1 row) DECLARE myraw RAW(100); amount INTEGER :=2; buffer INTEGER :=1; begin DBE_LOB.READ('123456789012345',amount,buffer,myraw); dbe_output.print_line(myraw); end; / 0123 ANONYMOUS BLOCK EXECUTE CREATE TABLE blob_Table (t1 blob); CREATE TABLE blob_Table_bak (t2 blob); INSERT INTO blob_Table VALUES('abcdef'); INSERT INTO blob_Table_bak VALUES('22222'); DECLARE str varchar2(100) := 'abcdef'; source raw(100); dest blob; copyto blob; amount int; PSV_SQL varchar2(100); PSV_SQL1 varchar2(100); a int :=1; len int; BEGIN source := dbe_raw.cast_from_varchar2_to_raw(str); amount := dbe_raw.get_length(source); PSV_SQL :='select * from blob_Table for update'; PSV_SQL1 := 'select * from blob_Table_bak for update'; EXECUTE IMMEDIATE PSV_SQL into dest; EXECUTE IMMEDIATE PSV_SQL1 into copyto; DBE_LOB.WRITE(dest, amount, 1, source); DBE_LOB.WRITE_APPEND(dest, amount, source); DBE_LOB.ERASE(dest, a, 1); DBE_OUTPUT.PRINT_LINE(a); DBE_LOB.COPY(copyto, dest, amount, 10, 1); perform DBE_LOB.CLOSE(dest); RETURN; END; / --删除表 DROP TABLE blob_Table; DROP TABLE DROP TABLE blob_Table_bak; DROP TABLE |