SQL Developer等でBLOBの列を抽出すると、通常↓のような表示になります。
本エントリは上記「(BLOB)」の中身を、読み書きする方法です。
いつも忘れるので、メモしておきます。
テーブル構成は↓とします。テーブル名/カラム名は、適宜書き換えてください。
# | COLUMN_NAME | DATA_TYPE |
---|---|---|
1 | COL_ID | NUMBER(10,0) |
2 | COL_DATA | BLOB |
BLOB列[COL_DATA]には、16バイトのバイナリを格納する想定で書きます。
select
COL_ID
, sys.dbms_lob.substr(COL_DATA, 16, 1) as COL_DATA
from
TABLE1;
実行すると↓になります。
ポイントは「SYS.DBMS_LOB.SUBSTR関数」で文字列に変換するというところ。
まず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のサイズを見る方法。サイズ超過の画像を探す場合などに有効です。
select
sys.dbms_lob.getlength(COL_DATA)
from
TABLE1
以上、備忘録でした。