カタカタブログ

SIerで働くITエンジニアがカタカタした記録を残す技術ブログ。Java, Oracle Database, Linuxが中心です。たまにRuby on Railsなども。

PL/SQLで文字列をbase64でエンコード/デコードする方法

Oracle PL/SQLではbase64エンコード/デコードは標準のutl_encodeというパッケージにてbase64_encodeやbase64_decode関数で簡単にエンコード/デコードすることができる。
ただし、base64は本質的にバイナリ(バイト列)とテキストの可逆変換なので、RAW型のデータとVARCHAR2型のデータのやりとりとなる。utl_rawパッケージを使用することで、VARCHAR2からVARCHAR2へのbase64変換を行う。

サンプルコードは以下。なお当環境はOracle DB 11gR2にて検証。

declare
     target   varchar2(255);
     encoded  varchar2(255);
     decoded  varchar2(255);
begin
     -- エンコード対象文字列
     target := 'Hello01!';
     dbms_output.put_line('target=' || target);

     -- base64でエンコード
     encoded  := utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(target)));         
     dbms_output.put_line('encoded=' || encoded);
     
     -- base64でデコード
     decoded  := utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw(encoded)));          
     dbms_output.put_line('decoded=' || decoded);
end;
/

これをbase64.sqlという名前で保存し、sqlplusで実行する。

SQL> set serverout on
SQL> @base64
target=Hello01!
encoded=SGVsbG8wMSE=
decoded=Hello01!

PL/SQLプロシージャが正常に完了しました。

“Hello01!”という対象文字列が”SGVsbG8wMSE=“にbase64エンコードされ、それが元の“Hello01!”にデコードされていることが確認できる。

以上