2012-04-30 60 views
6

私は次のように定義されるDB2(9.5.1)のテーブルがあります。DB2は大きなCLOB(> 32KB)をテキストにキャストしますか?

:私はCLOBに格納されている実際のテキスト文字列を照会したい場合

CREATE TABLE MY_TABLE 
( 
    ID INTEGER DEFAULT 0 NOT NULL, 
    TEXT CLOB(104857600), 
    PRIMARY KEY (ID) 
); 

は今、私はこのようにそれを行うに

select cast(t.TEXT as varchar(32000)) 
    from MY_TABLE t 
    where t.ID = 1; 

問題は私のテキストが切り捨てられていることになりましたが、varchar型の最大長は32キロバイトであるので、このクエリは失敗します。

select cast(t.TEXT as varchar(33000)) 
    from MY_TABLE t 
where t.ID = 1; 

CLOBの全内容をテキスト出力として取り出す方法がありますか?

私は、XMLデータを取得しなければならなかった似たような状況では、ピーター・

答えて

2

が、これは私のために

以前
select my_id, cast(xmlserialize(my_column as clob(1m)) as varchar(20000)) from schema.my_table where my_id = 463 

を働いていた私は、CASTなしでリスのSQLでこれを行うことができたが、私が持っていた最新バージョンキャストを使用する

+2

ただし、途中でvarchar(20000)にキャストします。これは32kを超えるvarcharsをどのように処理するのですか? – Beryllium

1

あなたが説明したようにSQLの選択でそれを使用する場合、32k制限を回避する方法はありません。

JDBCを使用してデータを取得する場合、結果セットでgetString()を使用する代わりに、CLOBハンドルを取得してストリームを取得できます。

一方、実際には制限はありますか? CLOBをwhere節などで実際に使用していますか? RDBMSは、より小さい行サイズがトランザクション内で効率的に処理されるように最適化されています。

一般に、データをストリームします。このCLOBに複数の列に分割できるデータが含まれていて、そのデータの一部がクエリ内に必要な場合(ここでは...、順序で...など)、データモデルを再設計することを検討してください。

7

私はこれをウェブ上の他の場所で見つけました。私は32kの限界付近で動作するので、私は見て共有すると思っていました。

SELECT 
    XMLCAST (
    XMLPARSE (
     DOCUMENT CAST (
     MY_CLOB_DATA AS BLOB 
    ) 
     PRESERVE WHITESPACE 
    ) as XML 
) 
FROM 
MY_TABLE 
WHERE ID = 1 
+0

XMLでBLOBを変換する必要がありました。これは、チャームのように機能しました。 – WannaGetHigh

関連する問題