我有以下问题:我们有一个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的正确结果。我相信这是解决方案。
答案 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
强> 的