Thursday, November 30, 2006
Convert BLOB to CLOB
Sample to convert BLOB to CLOB.
function ConvertBlobXMLToClob(pfile documents.name%type) return clob is
type message_type is record (
content blob,
charset varchar2(30),
typ varchar2(20)
);
v_message message_type;
v_content clob;
v_dest_offset number := 1;
v_src_offset number := 1;
v_lang_context number := dbms_lob.default_lang_ctx;
v_warning number;
v_x1 number;
begin
-- preberimo dokument
select t.blob_content, 'UTF8' --t.dad_charset
, t.mime_type
into v_message.content, v_message.charset, v_message.typ
from documents t
where t.name = pfile;
-- to CLOB
dbms_lob.createtemporary(v_content, TRUE);
v_dest_offset := 1;
v_src_offset := 1;
v_lang_context := dbms_lob.default_lang_ctx;
DBMS_LOB.CONVERTTOCLOB(v_content, v_message.content, dbms_lob.getlength
(v_message.content), v_dest_offset, v_src_offset,
nls_charset_id(v_message.charset), v_lang_context, v_warning);
v_x1 := instr(lower(substr(v_content,1,1000)),'encoding="');
if v_x1 > 0 then
v_message.charset := replace(substr(v_content,v_x1+10,instr(lower
(substr(v_content,1,1000)),'"', v_x1+10)-v_x1-10),'-','');
dbms_lob.createtemporary(v_content, TRUE);
v_dest_offset := 1;
v_src_offset := 1;
v_lang_context := dbms_lob.default_lang_ctx;
DBMS_LOB.CONVERTTOCLOB(v_content, v_message.content,
dbms_lob.getlength(v_message.content), v_dest_offset, v_src_offset,
nls_charset_id(v_message.charset), v_lang_context, v_warning);
end if;
return v_content;
end;
