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!”にデコードされていることが確認できる。
以上