0

次の問題があります: サイズ 4000 の文字フィールドを持つ DB2 テーブルがあります。

どういうわけか、このフィールドは、Oracle Gateway 経由で表示すると、oracle で varchar2(0 Char) として解釈されます。

CREATE OR REPLACE FORCE VIEW DB2SCHEMA.TEST_TABLE
(

   ID,
   TEXT
)
AS
   SELECT TRIM ("ID") AS ID,
          NULL AS "TEXT
   FROM XT.TEST_TABLE@DB2SCHEMA;

誰もこの問題を経験したことがありますか? 何らかの理由で、Oracle はこのフィールドを long として扱います。私はオラクル11gを使用しています。私が望むのは、通常のテキストフィールドとして表示することです(DB2では固定長の文字フィールドです)

いくつかの入力に感謝します。おそらく誰かがこれを通常の Varchar2(4000 Char) として取得する方法を知っています。

DESC XT.TEST_TABLE@DB2SCHEMA;

ORA-00604: error occurred at recursive SQL level 1
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[Oracle][ODBC DB2 Wire Protocol driver][UDB DB2 for OS/390 and z/OS]UNAVAILABLE       RESOURCE CAUSED FAILED EXEC; 00D70024 TYPE 00000220.      XT.DSNDBC.DSNDB06.DSNDLX04.I0001.A001 {HY000,NativeErr = -904}
ORA-02063: preceding 2 lines from QDBC

select * from ビューが 0 文字のフィールドを提供する前と同様に、Oracle パラメータを変更しました。

HS_KEEP_REMOTE_COLUMN_SIZE=ローカル

これにより、 select * from view で正しい結果が得られます。私の信念は、これが解決策であるということです。

4

1 に答える 1

0

私は Oracle Gateway や DB2 を使用したことはありませんが、「null as some_col」を選択して作成したビューは、その列を varchar2(0) として定義します。DB2SCHEMA から話している列を参照していません (TEXT列ではなく、NULL を選択しています。

この行を置き換えてみてください:

NULL AS "TEXT

と:

TEXT AS TEXT

またはおそらく:

SUBSTR(TEXT,1,2000) || SUBSTR(TEXT,2001,4000) AS TEXT

Oracle の CHAR 列の最大サイズは2000であるため、列を直接選択できるかどうかはわかりません。


編集:コメントによると、OPの問題はOracleパラメータを変更することで修正されました:

HS_KEEP_REMOTE_COLUMN_SIZE=LOCAL

于 2013-10-31T14:04:37.790 に答える