BLOG圖片和CLOG BASE64碼的轉換

--BASE64轉圖片
CREATE OR REPLACE 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 := i * v_Buffer_Size + 1;
  END LOOP;
  RETURN v_Blob;
END Decode_Base64;

--圖片轉BASE64
CREATE OR REPLACE FUNCTION Encode_Base64(p_Blob IN BLOB) RETURN CLOB IS
  l_Clob CLOB; l_Step PLS_INTEGER := 12000;
BEGIN
  FOR i IN 0 .. Trunc((Dbms_Lob.Getlength(p_Blob) - 1)/l_Step) LOOP 
    l_Clob := l_Clob || Utl_Raw.Cast_To_Varchar2(Utl_Encode.Base64_Encode(Dbms_Lob.Substr(p_Blob, l_Step, i * l_Step + 1)));
END LOOP; RETURN l_Clob;
END;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章