存过中BLOB转成Varchar函数如下:
--blob 转 varchar
FUNCTION blob_to_varchar(blob_in IN BLOB) RETURN VARCHAR2 IS
v_varchar VARCHAR2(2000);
v_start PLS_INTEGER := 1;
v_buffer PLS_INTEGER := 2000;
BEGIN
if DBMS_LOB.GETLENGTH(blob_in) is null then
return empty_clob();
end if;
DBMS_OUTPUT.put_line('TEST:' || CEIL(DBMS_LOB.GETLENGTH(blob_in)));
FOR i IN 1 .. CEIL(DBMS_LOB.GETLENGTH(blob_in) / v_buffer) LOOP
v_varchar := UTL_RAW.CAST_TO_VARCHAR2(utl_raw.convert(DBMS_LOB.SUBSTR(blob_in,
v_buffer,
v_start),
'AMERICAN_THE NETHERLANDS.UTF8',
'AMERICAN_THE NETHERLANDS.UTF8'));
v_start := v_start + v_buffer;
END LOOP;
RETURN v_varchar;
end blob_to_varchar;
测试函数如下:
--测试
procedure testblob(out_retVal out varchar2) is
tmpblob blob;
tmpjson json;
begin
select t.order_list_json
into tmpblob
from testTable t ;
out_retVal := blob_to_varchar(tmpblob);--转varchar
tmpjson := json(blob_to_varchar(tmpblob));--varchar转成json
end;