簡體   English   中英

DB2“ SQL0901 SQL系統錯誤”。 嘗試從包含UNION的視圖中進行選擇時

[英]DB2 'SQL0901 SQL System Error.' when trying to SELECT from view containing UNION

我正在使用AS400 DB2數據庫。 在該數據庫中,我有3個視圖。

所有視圖具有完全相同的列名和數據類型。 視圖1和視圖2每個都包含一個Select語句,該語句在同一源表上具有聚合函數。 只是WHERE條件和集合函數有些不同。

視圖3只是視圖1和視圖2上的UNION SELECT合並結果。

所以這是我的問題。

SELECT 2 AS CLIENT, COLUMN1, COLUMN2, COLUMN3, COLUMN4, VALUE 
FROM SOME_DATABASE.VIEW3
WHERE COLUMN1 = @COLUMN1 AND COLUMN2 = @COLUMN2 ORDER BY COLUMN3

我可以在VIEW 1和2上的c#程序中執行參數化的SELECT語句(如上面的語句),而不會出現問題,但是當我嘗試在VIEW 3上使用參數化的SELECT時,出現“ SQL0901 SQL系統錯誤”。 但是,當我不使用參數時,它就可以正常工作。

誰能向我解釋這種行為?

AS400 DB2版本為v5r2m0。該程序在VS 2012中的.NET 4.0中使用c#編寫,使用“ IBM.Data.DB2.iSeries.dll”訪問數據庫

定義視圖1:

SELECT  COLUMN1,  
        COLUMN2,  
        COLUMN3,  
        COLUMN4,  
        SUM(CAST((TRIM(SUBSTR(COLUMN5,104,1))||TRIM(SUBSTR(COLUMN5,94,3))||TRIM(SUBSTR(COLUMN5,98,3))||'.'||TRIM(SUBSTR(COLUMN5,102,2))) AS DECIMAL(10,2))) AS VALUE
FROM    SOME_DATABASE.SOME_TABLE  
WHERE   TRIM(SUBSTR(COLUMN5,105,3)) <> ''
AND     SUBSTR(COLUMN5,103,5) <> '  EUR'  
AND     COLUMN4 IN ('  $NEHHZ','$NEHHZVE','$NEHWMVE','  $NEHWW','$NEHWWVE','$NEHWWSK',' $NEHKW1',' $NEHKW2',' $NEHSK1',' $NEHSK2','  $NEHNV',' $NEHKZ1',' $NEHLZ1',' $NEHSZ1')  
GROUP BY  COLUMN1,  
        COLUMN2,  
        COLUMN3,  
        COLUMN4  

定義視圖2:

SELECT  COLUMN1,  
        COLUMN2,  
        COLUMN3,  
        COLUMN4,  
        SUM(CAST(TRIM(SUBSTR(COLUMN5,109,1))||TRANSLATE(TRIM(SUBSTR(COLUMN5,99,10)),'.',',') AS DECIMAL(10,2))) AS VALUE  
FROM    SOME_DATABASE.SOME_TABLE  
WHERE   COLUMN6 != 0  
AND     COLUMN4 IN (' SUM$HKV',' SUM$KWZ',' SUM$KZ',' SUM$LZ',' SUM$SZ',' SUM$WMZ',' SUM$WWZ')  
GROUP BY COLUMN1,  
        COLUMN2,  
        COLUMN3,  
        COLUMN4  

定義視圖3:

SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4, VALUE
FROM SOME_DATABASE.VIEW1
UNION
SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4, VALUE
FROM SOME_DATABASE.VIEW2

似乎視圖上的視圖不支持參數化的SELECT語句。 我只是用包含視圖1 UNION視圖2的定義的語句替換了第三視圖,例如:

 SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4, SUM(CAST((TRIM(SUBSTR(COLUMN5,104,1))||TRIM(SUBSTR(COLUMN5,94,3))||TRIM(SUBSTR(COLUMN5,98,3))||'.'||TRIM(SUBSTR(COLUMN5,102,2))) AS DECIMAL(10,2))) AS VALUE FROM SOME_DATABASE.SOME_TABLE WHERE TRIM(SUBSTR(COLUMN5,105,3)) <> '' AND SUBSTR(COLUMN5,103,5) <> ' EUR' AND COLUMN4 IN (' $NEHHZ','$NEHHZVE','$NEHWMVE',' $NEHWW','$NEHWWVE','$NEHWWSK',' $NEHKW1',' $NEHKW2',' $NEHSK1',' $NEHSK2',' $NEHNV',' $NEHKZ1',' $NEHLZ1',' $NEHSZ1') GROUP BY COLUMN1, COLUMN2, COLUMN3, COLUMN4 UNION SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4, SUM(CAST(TRIM(SUBSTR(COLUMN5,109,1))||TRANSLATE(TRIM(SUBSTR(COLUMN5,99,10)),'.',',') AS DECIMAL(10,2))) AS VALUE FROM SOME_DATABASE.SOME_TABLE WHERE COLUMN6 != 0 AND COLUMN4 IN (' SUM$HKV',' SUM$KWZ',' SUM$KZ',' SUM$LZ',' SUM$SZ',' SUM$WMZ',' SUM$WWZ') GROUP BY COLUMN1, COLUMN2, COLUMN3, COLUMN4 

現在,它可以完美運行。 但我仍然不明白為什么會發生此錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM