3

AS400DB2データベースを使用しています。そのデータベースでは、3つのビューを取得しました。

すべてのビューには、まったく同じ列名とデータ型があります。ビュー1と2はそれぞれ、同じソーステーブル上の集計関数を持つSelectステートメントで構成されています。WHERE条件と集計関数だけが少し異なります。

ビュー3は、結果をマージするビュー1とビュー2の両方でのUNIONSELECTです。

これが私の質問です。

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を使用しようとすると、「SQL0901SQLシステムエラー」が発生します。ただし、パラメータを使用しない場合は問題なく動作します。

誰かが私にこの振る舞いを説明できますか?

AS400 DB2バージョンはv5r2m0です。プログラムは、データベースにアクセスするために「IBM.Data.DB2.iSeries.dll」を使用して、VS2012の.NET4.0上のc#で記述されています。

定義ビュー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
4

1 に答える 1

1

It looks like parameterized SELECT Statements are not supported with views on views. I just replaced the 3rd View with a statement containing the definition of view 1 UNION view 2 like:

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 

And now it just works perfectly. But i still dont understand why this error occured.

于 2013-02-06T15:36:07.180 に答える