7

次のように定義された DB2 (9.5.1) テーブルがあります。

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

CLOB に格納されている実際のテキスト文字列をクエリする場合は、次のようにします。

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

問題は、テキストが切り捨てられることですが、varcharの最大長は 32KB であるため、次のクエリは失敗します。

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

CLOB の完全な内容をテキスト出力として取得する方法は他にありますか?

ピーター

4

3 に答える 3

2

同様の状況で、xmlデータを取得する必要がありましたが、これは私にとってはうまくいきました

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

以前はCASTなしでsquirrelsqlでこれを行うことができましたが、最新バージョンではキャストを使用する必要がありました

于 2013-01-14T22:22:17.160 に答える
1

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

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

一方で、それは本当に限界でしょうか?where句などでCLOBを本当に使用していますか?RDBMS は、小さい行サイズをトランザクションで効率的に処理できるように最適化されています。

一般的に言えば、データをストリーミングします。この CLOB に複数の列に分割できるデータが含まれており、クエリでそのデータの一部が必要な場合 (どこで ...、order by ... など)、データ モデルの再設計を検討してください。

于 2013-05-25T18:29:32.193 に答える