Oracle表作为oracle中的视图将字符字段显示为varchar2(0个字符)

时间:2013-10-31 13:38:53

标签: oracle view plsql db2 long-integer

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

当我通过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将对此字段进行处理。我正在使用Oracle 11g。我想要的是将它显示为普通文本字段(在DB2中它是一个固定长度的字符字段)

感谢您的一些输入,也许有人知道如何将其作为普通的Varchar2(4000字符)。

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 = LOCAL

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

1 个答案:

答案 0 :(得分: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