2009-05-06 29 views
85

SQLコンソールからOracle BLOB内の内容を確認しようとしています。Oracle SQLのBLOBからテキスト・コンテンツを取得するには

私はそれがテキストのやや大きな体が含まれています知っていると私はテキストだけを見たいと思ってますが、次のクエリは、そのフィールドでBLOBがあることを示している:

select BLOB_FIELD from TABLE_WITH_BLOB where ID = '<row id>'; 

私は結果は私が期待していたものではありません。

 
    BLOB_FIELD 
    ----------------------- 
    [email protected] 

BLOBをテキスト表現にするにはどのような魔法の呪文を使用できますか?

PS:SQLコンソール(Eclipse Data Tools)からBLOBの内容を見ようとしていますが、コードでは使用しません。

答えて

104

まず、バイナリ・データ用に設計されたBLOBではなくCLOB/NCLOB列にテキストを格納することができます(問合せはCLOBで動作します)。

次のクエリでは、すべての文字セットが互換性がある(BLOBに格納されたテキストの元のCS、使用するデータベースのCS)ために、BLOB内のテキストの最初の32767文字VARCHAR2):

select utl_raw.cast_to_varchar2(dbms_lob.substr(BLOB_FIELD)) from TABLE_WITH_BLOB where ID = '<row id>'; 
+3

残念ながら、私は、データベーススキーマをコントロールしていない - 私はとにかく しかし、おかげで...ブロブに覗き見する必要があります。 –

+0

ありがとうマック、それはうまくいく---しかし、その "dbms_lob.substr"の目的は何ですか? --- select utl_raw.cast_to_varchar2(BLOB_FIELD)を使用するだけで、同じ結果が得られるようです...? – Rop

+4

cast_to_varchar2は、RAW入力を受け取ります(http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/u_raw.htm#autoId18)。これは32767バイトの長さに制限されています(http:// docs。 oracle.com/cd/E11882_01/appdev.112/e10472/datatypes.htm#autoId8)。 BLOBにはサイズに制限がないため、必要に応じてsubstrは正しいサイズに切り捨てます(http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_lob.htm#autoId57)。 – Mac

-4

TO_CHARを使用してください。

select TO_CHAR(BLOB_FIELD) from TABLE_WITH_BLOB where ID = '<row id>' 

は、データベース・キャラクタ・セットにNCHARNVARCHAR2CLOB、またはNCLOBデータを変換します。返される値は常にVARCHAR2です。

+7

残念ながら、これはBLOBsの質問に応じて動作しません。 –

+0

SELECT DBMS_LOB.SUBSTR(BLOB_FIELD)FROM TABLE_WITH_BLOB; – Sambhav

5

テキスト内で検索するのではなく、それを表示したい場合は、この作品:私の列が圧縮されていないので、

with unzipped_text as (
    select 
    my_id 
    ,utl_compress.lz_uncompress(my_compressed_blob) as my_blob 
    from my_table 
    where my_id='MY_ID' 
) 
select * from unzipped_text 
where dbms_lob.instr(my_blob, utl_raw.cast_to_raw('MY_SEARCH_STRING'))>0; 
+0

ここにmy_idとは何ですか? – anjanb

+0

@anjanb - 読みたい行のキーです – Barn

1

納屋の答えは修正して私のために働きました。迅速かつ汚いソリューション:

select * from my_table 
where dbms_lob.instr(my_UNcompressed_blob, utl_raw.cast_to_raw('MY_SEARCH_STRING'))>0; 
2

私はしばらくの間、これで苦労し、PL/SQLソリューションを実装し、それ以降のヒキガエルにあなたは、単に結果グリッドのセルをダブルクリックすることができますことに気づき、それが起動しますテキストの内容を持つエディタ。あなたがテーブルからBLOBフィールドを読み取るためにSQLの下に使用することができます

enter image description here

10

(私はヒキガエルのV11によ)。

SELECT DBMS_LOB.SUBSTR(BLOB_FIELD_NAME) FROM TABLE_NAME; 
関連する問題