2013-10-31 98 views
0

我有以下問題:我們有一個DB2表具有尺寸4000DB2表作爲圖中示出了oracle的字符字段爲VARCHAR2(0 CHAR)

不知何故這個字段被在Oracle解釋爲字符字段varchar2(0字符),當我通過Oracle網關查看它。

CREATE OR REPLACE FORCE VIEW DB2SCHEMA.TEST_TABLE 
(

    ID, 
    TEXT 
) 
AS 
    SELECT TRIM ("ID") AS ID, 
      NULL AS "TEXT 
    FROM [email protected]; 

有沒有人曾經expirienced這個問題?由於某種原因,Oracle會將這個領域視爲長期。我正在使用Oracle 11g。我想要顯示它爲普通文本字段(在DB2中它是一個固定長度的字符字段)

感謝您的一些輸入,也許有人知道如何獲得這是一個正常的Varchar2(4000個字符)。

DESC [email protected];

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視圖確實提供了我們已經改變一個Oracle參數

HS_KEEP_REMOTE_COLUMN_SIZE = LOCAL

這提供了正確的結果與SELECT * FROM視圖0字符字段。我相信這是解決方案。

+0

什麼的輸出'DESC XT.TEST_TABLE @ DB2SCHEMA'在SQL * Plus中? –

+0

@MarcoBaldelli不幸的是,這似乎不工作:/你有任何其他的建議嗎? –

+1

在您的選擇中,您只從遠程數據庫中選擇「ID」列,第二列是常量「NULL」。你可以在DB2端發佈表的結構嗎?網關正在翻譯哪一列? –

回答

0

我從未使用Oracle網關或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列的最大大小s是2000,所以我不確定你是否可以直接選擇列。


編輯:按照意見,OP的問題是通過改變Oracle參數固定:

HS_KEEP_REMOTE_COLUMN_SIZE=LOCAL

+0

您可以將參數放入結果嗎?所以我可以接受它作爲答案。謝謝 –

+0

我可以,但我不確定這個參數如何影響任何東西。你的視圖仍然選擇'null作爲文本'嗎?如果是這樣,我很難相信這個參數修復了這個問題? ...或者你現在選擇了你想要的實際遠程列(也許TEXT爲TEXT)? – Gerrat

+0

嗨Gerrat,有問題後,我選擇了它*,它會提供相同的結果「varchar2(0 Char)」更改參數後它不再需要定義,似乎這個問題是有關將DB2上的非UTF字符集定義轉換爲UTF-8 Oracle實例 –

相關問題