ORACLE 10G R2上
测试通过。
CREATE
OR
REPLACE
FUNCTION
C2B (b
IN
CLOB
default
empty_clob())
RETURN BLOB
-- typecasts BLOB to CLOB (binary conversion)
IS
res BLOB;
b_len number : = dbms_lob.getlength(b) ;
dest_offset1 NUMBER : = 1 ;
src_offset1 NUMBER : = 1 ;
amount_c INTEGER : = DBMS_LOB.lobmaxsize;
blob_csid NUMBER : = DBMS_LOB.default_csid;
lang_ctx INTEGER : = DBMS_LOB.default_lang_ctx;
warning INTEGER ;
BEGIN
if b_len > 0 then
DBMS_LOB.createtemporary (res, TRUE);
DBMS_LOB. OPEN (res, DBMS_LOB.lob_readwrite);
DBMS_LOB.convertToBlob (res,
b,
amount_c,
dest_offset1,
src_offset1,
blob_csid,
lang_ctx,
warning
);
else
select empty_blob() into res from dual ;
end if ;
RETURN res; -- res is OPEN here
END C2B;
RETURN BLOB
-- typecasts BLOB to CLOB (binary conversion)
IS
res BLOB;
b_len number : = dbms_lob.getlength(b) ;
dest_offset1 NUMBER : = 1 ;
src_offset1 NUMBER : = 1 ;
amount_c INTEGER : = DBMS_LOB.lobmaxsize;
blob_csid NUMBER : = DBMS_LOB.default_csid;
lang_ctx INTEGER : = DBMS_LOB.default_lang_ctx;
warning INTEGER ;
BEGIN
if b_len > 0 then
DBMS_LOB.createtemporary (res, TRUE);
DBMS_LOB. OPEN (res, DBMS_LOB.lob_readwrite);
DBMS_LOB.convertToBlob (res,
b,
amount_c,
dest_offset1,
src_offset1,
blob_csid,
lang_ctx,
warning
);
else
select empty_blob() into res from dual ;
end if ;
RETURN res; -- res is OPEN here
END C2B;