这个问题可能是解决了:将函数decode_base64里循环里的v_offset := v_offset + v_buffer_size修改为v_offset := v_offset + v_buffer_size-1,原因不知道,完全是蒙的,只是显示出来的照片,从人眼来看,是完整的,不像原来那样下面很明显的少一块。
函数replaceClob是不需要的。
完整的脚本是:
--从base64编码的照片转换为blob类型,
--
function decode_base64(p_clob_in in clob) return blob is
v_blob blob;
v_offset integer;
v_tem_clob clob;
v_buffer_varchar varchar2(32000);
v_buffer_raw raw(32000);
v_buffer_size binary_integer := 32000;
begin
if p_clob_in is null then
return null;
end if;
dbms_lob.CREATETEMPORARY(v_blob, true);
v_offset := 1;
FOR i IN 1..CEIL(dbms_lob.GETLENGTH(p_clob_in) / v_buffer_size) loop
dbms_lob.READ(p_clob_in, v_buffer_size, v_offset, v_buffer_varchar);
v_buffer_raw := utl_encode.BASE64_DE