125

Oracle BLOB の内容を SQL コンソールから確認しようとしています。

かなり大きなテキスト本文が含まれていることはわかっており、テキストだけを表示したいのですが、次のクエリは、そのフィールドに BLOB があることを示しているだけです。

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

私が得ている結果は、私が期待したものとはまったく異なります:

    BLOB_FIELD
    -----------------------
    oracle.sql.BLOB@1c4ada9

では、BLOB をテキスト表現に変換するには、どのような魔法の呪文を使えばよいでしょうか?

PS: コードで使用するのではなく、SQL コンソール (Eclipse Data Tools) から BLOB の内容を見ようとしているだけです。

4

12 に答える 12

153

まず、バイナリデータ用に設計されたBLOBではなくCLOB / NCLOB列にテキストを格納することをお勧めします(ちなみに、クエリはCLOBで機能します)。

次のクエリでは、すべての文字セットに互換性がある場合、blob内のテキストの最初の32767文字(最大)を表示できます(BLOBに格納されているテキストの元のCS、VARCHAR2に使用されるデータベースのCS):

select utl_raw.cast_to_varchar2(dbms_lob.substr(BLOB_FIELD)) from TABLE_WITH_BLOB where ID = '<row id>';
于 2009-05-06T09:36:15.630 に答える
16

以下の SQL を使用して、テーブルから BLOB フィールドを読み取ることができます。

SELECT DBMS_LOB.SUBSTR(BLOB_FIELD_NAME) FROM TABLE_NAME;
于 2014-12-23T10:57:40.990 に答える
3

私はしばらくこれに苦労し、PL/SQL ソリューションを実装しましたが、Toad では結果グリッド セルをダブルクリックするだけで、内容がテキストのエディターが表示されることに後で気付きました。(私はToad v11を使用しています)

ここに画像の説明を入力

于 2014-05-13T13:06:59.737 に答える
3

私の列は圧縮されていないため、Barnの答えは修正でうまくいきました。手っ取り早い解決策:

select * from my_table
where dbms_lob.instr(my_UNcompressed_blob, utl_raw.cast_to_raw('MY_SEARCH_STRING'))>0;
于 2014-04-11T17:13:04.850 に答える
-6

関数を使用TO_CHARします。

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

、、、またはデータをデータベース文字セットに変換NCHARします。返される値は常にです。NVARCHAR2CLOBNCLOBVARCHAR2

于 2012-06-17T10:38:25.570 に答える