![](/img/trans.png)
[英]DB2 + C#: Getting a SQL0302N error when trying to store a Bigint value
[英]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.