blob照片显示 oracle_oracle里处理照片的BASE64转换为blob的问题
这个问题可能是解决了:将函数decode_base64里循环里的v_offset := v_offset + v_buffer_size修改为v_offset := v_offset + v_buffer_size-1,原因不知道,完全是蒙的,只是显示出来的照片,从人眼来看,是完整的,不像原来那样下面很明显的少一块。函数replaceClob是不需要的。完整的脚本是:--从base64编码的照片转
这个问题可能是解决了:将函数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_DECODE(utl_raw.CAST_TO_RAW(v_buffer_varchar));
dbms_lob.WRITEAPPEND(v_blob, utl_raw.LENGTH(v_buffer_raw), v_buffer_raw);
v_offset := v_offset + v_buffer_size-1;
end loop;
return v_blob;
end decode_base64;
因为不理解原理,我比较担心,虽然人眼看着是个完整的照片,但实际上照片数据是有损坏的,我不能保证这个脚本就是对的。
有个参考资料,是我原来的写法,我的证实,是错的,不要仿照:
http://www.dbforums.com/oracle/1624851-clob-blob.html

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)