Base64與BLOB 轉換函式

renjixinchina發表於2014-04-22

Base64 介紹

Base64是一種基於64個可列印字元來表示二進位制資料的表示方法。由於26次方等於64,所以每6為一個單元,對應某個可列印字元。三個24個位元,對應於4Base64單元,即3個位元組需要用4個可列印字元來表示。它可用來作為電子郵件的傳輸編碼。在Base64中的可列印字元包括字母A-Za-z、數字0-9,這樣共有62個字元,此外兩個可列印符號在不同的系統中而不同。一些如的其他編碼方法,和之後的版本使用不同的64字符集來代表6個二進位制數字,但是它們不叫Base64

Base64常用於在通常處理文字資料的場合,表示、傳輸、儲存一些二進位制資料。包括MIMEemailemail via MIME,XML中儲存複雜資料.

Base64BLOB

CREATE OR REPLACE FUNCTION base64encode(p_blob IN BLOB)

  RETURN CLOB

-- -----------------------------------------------------------------------------------

-- File Name    :

-- Author       : Tim Hall

-- Description  : Encodes a BLOB into a Base64 CLOB.

-- Last Modified: 09/11/2011

-- -----------------------------------------------------------------------------------

IS

  l_clob CLOB;

  l_step PLS_INTEGER := 12000; -- make sure you set a multiple of 3 not higher than 24573

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;

/

BLOBbase64

CREATE OR REPLACE FUNCTION base64decode(p_clob CLOB)

  RETURN BLOB

-- -----------------------------------------------------------------------------------

-- File Name    :

-- Author       : Tim Hall

-- Description  : Decodes a Base64 CLOB into a BLOB

-- Last Modified: 09/11/2011

-- -----------------------------------------------------------------------------------

IS

  l_blob    BLOB;

  l_raw     RAW(32767);

  l_amt     NUMBER := 7700;

  l_offset  NUMBER := 1;

  l_temp    VARCHAR2(32767);

BEGIN

  BEGIN

    DBMS_LOB.createtemporary (l_blob, FALSE, DBMS_LOB.CALL);

    LOOP

      DBMS_LOB.read(p_clob, l_amt, l_offset, l_temp);

      l_offset := l_offset + l_amt;

      l_raw    := UTL_ENCODE.base64_decode(UTL_RAW.cast_to_raw(l_temp));

      DBMS_LOB.append (l_blob, TO_BLOB(l_raw));

    END LOOP;

  EXCEPTION

    WHEN NO_DATA_FOUND THEN

      NULL;

  END;

  RETURN l_blob;

END;

/

轉自於:oracle-base

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15747463/viewspace-1147139/,如需轉載,請註明出處,否則將追究法律責任。

相關文章