2015-04-27 24 views
0

產生下面是我的查詢看起來像在表1,表2什麼是表的數據類型在運行時

SELECT * FROM (SELECT * FROM table1 t1 WHERE col3='abc') 
INNER JOIN table2 t2 ON t1.col1=t2.col1 
INNER JOIN table3 t3 ON t2.col1=t3.col1 

數據類型的所有列,表3爲varchar。

我假設執行查詢時,首先將table1存儲在內存中,然後加入操作將在條件下完成。

當table1存儲在內存中時,列的數據類型是否與表定義中的相同?因爲如果數據類型改變連接條件的bcoz,它可能會引發一些錯誤。

我這個查詢實際上是一個視圖和亞姆獲得以下錯誤。 1.在運行RUNSTATS時:

該實用程序無法生成統計信息。錯誤 「-420」 被 返回.. SQLCODE = -2310,SQLSTATE =,DRIVER = 3.61.75

  • 當運行此查詢,而無需使用其視圖名稱(我的意思是直接運行查詢) [jcc] [t4] [1026] [11213] [3.61.75]由於內部JCC錯誤引發的錯誤檢查異常。請聯繫支持。
  • 消息文本:服務器上發生錯誤。嚴重性代碼8.從服務器返回的代碼無例外 。 ERRORCODE = -4228,SQLSTATE =空

  • 儘管運行的查詢SELECT * from view;
  • 無效字符的功能 「DECFLOAT」 .. SQLCODE = -420,SQLSTATE = 22018,DRIVER的字符串參數發現= 3.61.75

    我使用DB2 LUW 9.5

    +0

    試試這個:(SELECT * FROM表1 T1 WHERE COL3 ='abc')t1 – PeterRing

    +0

    這可能是一個愚蠢的問題,但你有沒有檢查函數DECFLOAT在字符串參數中的無效字符? –

    +0

    您不能假設「...先將table1存儲在內存中......」。 SQL優化器決定實際的執行順序。 – jarlh

    回答

    0

    我的實際查詢沒有SELECT *。它包含基於CASE的表達。 因此,在那部分數據類型與ELSE部分不同。 實例:CASE WHEN '一',然後 '你好' ELSE 0

    的是因爲這一點,我漸漸的錯誤,我已經改變其他部分爲 '0'