0

我有以下问题:我们有一个 DB2 表,其字符字段大小为 4000。

当我通过 Oracle 网关查看该字段时,不知何故,该字段在 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 会一直处理该字段。我正在使用 Oracle 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 view 提供了一个 0 字符字段一样,我们更改了一个 Oracle 参数

HS_KEEP_REMOTE_COLUMN_SIZE=本地

这为 select * from view 提供了正确的结果。我相信这是解决方案。

4

1 回答 1

0

我从未使用过 Oracle Gateway 或 DB2,但您通过选择“null as some_col”创建的任何视图都会将该列定义为 varchar2(0)。您甚至没有从 DB2SCHEMA 中引用您正在谈论的列(您选择的是 NULL,而不是TEXT列。

您可以尝试替换此行:

NULL AS "TEXT

和:

TEXT AS TEXT

或者可能:

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

Oracle CHAR 列的最大大小是2000,所以我不确定您是否可以直接选择该列。


编辑:根据评论,通过更改 Oracle 参数解决了 OP 的问题:

HS_KEEP_REMOTE_COLUMN_SIZE=LOCAL

于 2013-10-31T14:04:37.790 回答