在DB2-400 v7r3m0中,是否可以在合并或更新语句的表表达式中使用公共表表达式(CTE)?
有this article,从表面上看,它与我的问题完全相同。然而,这篇文章已有8年的历史,没有任何OP、答复或评论表明DB2的版本。多年来,DB2的平台和版本可能发生了变化或改进,现在允许我做我想做的事情。
下面是一个SQL脚本,它生成三个结果表。有临时表、表表达式和CTE。除了带有CTE3的注释部分之外,整个过程都正常工作,这将显示以下错误:
SQL Error [42601]: [SQL0199] Keyword AS not expected. Valid tokens: FULL LEFT CROSS INNER RIGHT EXCEPTION.
我也尝试了更新语句,并收到了一个类似的错误,表明不同的关键字是预期的。
注释部分是上面的语句的一个近乎精确的副本,唯一的更改是CTE。thE注释部分可以工作吗.?
-- CREATE HYPOTHETICAL TABLE. USE A CTE.
DECLARE GLOBAL TEMPORARY TABLE SESSION.TESTTABLE
AS ( WITH CTE1 AS ( SELECT *
FROM TABLE(VALUES(1,'BE'),(2,'BI'),(3,'BN')
) AS TMP (ID,PCLASS)
)
SELECT *
FROM CTE1
) WITH DATA WITH REPLACE ;
-- CREATE TABLE WITH CHANGES TO PUT IN PREVIOUS TABLE.
DECLARE GLOBAL TEMPORARY TABLE SESSION.NEWVALUES
AS ( SELECT *
FROM TABLE(VALUES(1,'XX'),(2,'YY'),(3,'ZZ')
) AS TMP (ID,QCLASS)
) WITH DATA WITH REPLACE ;
-- SHOW THE FIRST TABLE.
SELECT *
FROM SESSION.TESTTABLE ;
-- MAKE A SIMPLE WORKING CTE, AND USE IT TO SHOW THE 2ND TABLE.
WITH CTE2 AS ( SELECT ID, QCLASS
FROM SESSION.NEWVALUES
)
SELECT *
FROM CTE2 ;
-- THE FOLLOWING WORKS. IT MERGES CHANGES FROM 2ND TABLE INTO THE 1ST.
MERGE INTO SESSION.TESTTABLE AS TT
USING ( SELECT ID, QCLASS
FROM SESSION.NEWVALUES
) AS NV ON TT.ID = NV.ID
--WHEN MATCHED THEN -- UPDATE ALL RECORDS
WHEN MATCHED AND TT.ID=2 THEN -- UPDATE ONLY RECORD #2
UPDATE SET TT.PCLASS = NV.QCLASS ;
-- THIS FOLLOWING DOESN'T WORK AND DISPLAYS THIS ERROR:
-- SQL Error [42601]: [SQL0199] Keyword AS not expected.
-- Valid tokens: FULL LEFT CROSS INNER RIGHT EXCEPTION.
/*
MERGE INTO SESSION.TESTTABLE AS TT
USING ( WITH CTE3 AS ( SELECT ID, QCLASS
FROM SESSION.NEWVALUES
)
SELECT *
FROM CTE3 -- CTE USED HERE
) AS NV ON TT.ID = NV.ID
--WHEN MATCHED THEN -- UPDATE ALL RECORDS
WHEN MATCHED AND TT.ID=2 THEN -- UPDATE ONLY RECORD #2
UPDATE SET TT.PCLASS = NV.QCLASS ;
*/
-- SHOW THE FIRST TABLE AGAIN, BUT NOW WITH THE CHANGES.
SELECT *
FROM SESSION.TESTTABLE ;发布于 2019-09-04 16:35:49
这里记录了i 7.4的WITH公共表表达式(CTE)
它显示您可以在CTE之后使用一个完整的选择。
更新记录在这里。
但是没有显示UPDATE可以使用CTE,尽管它确实说您可以更新一个(可更新的)视图,并且视图支持CTEs 74/db2/rbafzhcview.htm。
MERGE的情况也是类似的
https://stackoverflow.com/questions/57729426
复制相似问题