DB

【Oracle】BLOB(バイナリデータ)の可視化と登録方法

SQL Developer等でBLOBの列を抽出すると、通常↓のような表示になります。

blobの中身が見れない

本エントリは上記「(BLOB)」の中身を、読み書きする方法です。
いつも忘れるので、メモしておきます。

テーブル構成は↓とします。テーブル名/カラム名は、適宜書き換えてください。

TABLE1

# COLUMN_NAME DATA_TYPE
1 COL_ID NUMBER(10,0)
2 COL_DATA BLOB

BLOB列[COL_DATA]には、16バイトのバイナリを格納する想定で書きます。


BLOBの読み取り


select 
    COL_ID
  , sys.dbms_lob.substr(COL_DATA, 16, 1) as COL_DATA
from
    TABLE1;

実行すると↓になります。

blobの中身が見えるようになる

ポイントは「SYS.DBMS_LOB.SUBSTR関数」で文字列に変換するというところ。


BLOBの書き込み

まずINSERT。
hextoraw()関数を使用し文字列⇒バイナリにすれば登録できます。


insert into TABLE1
(
    COL_ID
  , COL_DATA
) 
values 
(
    1
  , hextoraw('000102030405060708090A0B0C0D0E0F')
}

UPDATEも同様です。


update TABLE1 set
    COL_DATA = hextoraw('000102030405060708090A0B0C0D0E0F')
where
    COL_ID = 1


BLOBのサイズ取得

登録されているBLOBのサイズを見る方法。サイズ超過の画像を探す場合などに有効です。


select
    sys.dbms_lob.getlength(COL_DATA)
from
    TABLE1

以上、備忘録でした。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です