【Oracle】DBのBLOBカラムの中身をSQLで確認する方法

どうも、カメ助(@kamesuke_blog)です。

業務でOracleDBのBLOBデータの中身を確認する必要がありました。しかし、単純なSELECT文では(BLOB)と表示され、BLOBデータの中身を確認できません。

そこで、BLOBデータの中身を確認するSQLを作成したのでまとめておきます。Oracleユーザーの参考になれば幸いです。

目次

BLOBデータの中身を確認するSQL

単純なSQL(SELECT文)では、BLOBデータは(BLOB)と表示され確認できませんが、このSQLを実行すると確認できます。

上記の例は、対象テーブルからBLOBのカラムの1バイト~最大2000バイトまでのデータを読み取り、文字列として出力します。

続いてSQLでBLOBデータを確認する具体例を見ていきましょう。

具体例:BLOBデータの中身を確認する

前提のDBデータ

DB(TEST_BLOB_TABLEテーブル)に以下のデータが登録されているとします。

IDBLOB_COLUMN ※BLOB型
1test_blob_data
2test_blob_data2
普通のSQLでは、BLOB_COLUMNのデータは(BLOB)と表示されます

当然ですが、単純なSQL(SELECT文)で内容を確認すると、下図の通りBLOBのデータは見えません。

単純なSQLではBLOBデータの中身は確認できません

BLOBデータの中身を確認するSQL

実行結果

BLOBのデータが確認できています

BLOBカラムのデータ内容が文字列として確認できますね。

SQL解説

SQLの内容について解説します。忙しい方は読み飛ばしていただいて問題ありません。

まず、SYS.DBMS_LOB.SUBSTR(BLOB_COLUMN, 2000, 1)では、BLOBデータを16進数で表示します

SQLの実行結果

BLOBのデータは16進数で表示されています

データの中身は(BLOB)ではない状態になっていますね。ただし、16進数のため中身を確認することが難しいです。そこで、UTL_RAW.CAST_TO_VARCHAR2() を使うと、16進数のデータをVARCHAR2型(文字列)に変換できます

SYS.DBMS_LOB.SUBSTR(BLOB_COLUMN, 2000, 1)の部分をUTL_RAW.CAST_TO_VARCHAR2(SYS.DBMS_LOB.SUBSTR(BLOB_COLUMN, 2000, 1))に変更することで、BLOBのデータの中身が確認できるようになります。

BLOBのデータが確認できています

ちなみに、16進数:746573745F626C6F625F64617461 = 文字列:test_blob_data を意味しています。

BLOBデータを確認するポイント
  • BLOBデータを16進数で表示:SYS.DBMS_LOB.SUBSTR()
  • 16進数を文字列に変換:UTL_RAW.CAST_TO_VARCHAR2()

まとめ

BLOBデータの中身を確認するSQLについて紹介しました。

DBで大きなデータを扱う際には、BLOBデータを扱うことが多いと思いますので、今回の記事を参考にしてください。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

この記事を書いた人

大阪でITエンジニアしています。(8年目に突入)
趣味でウェブサイトに関することをいろいろと勉強しています。

勉強した内容やプログラミングに関する情報を中心に役立つ情報を発信するべく日々ブログを更新しています。

3度の飯よりも「柿の種」をこよなく愛する関西人。

コメント

コメントする

目次
閉じる