我正在使用CTE创建一个递归查询来将多个列数据合并为一个。DB2使用CTE和sql递归获取QDT数组列表的最大值超过
我有大约9个正在运行的CTE(我需要按照每个请求在一行中合并几次列,所以我有CTE助手)。当我添加第10个时,我得到一个错误。我正在对Visual Studio 2010中的查询,这里是错误:
而使用,WRKOBJLCK MyUserProfile * USRPRF命令AS400系统上,我看到:
我找不到任何关于此的信息。
我使用DB2的AS400系统上运行,并使用:操作系统:i5/OS的版本:V5R4M0
我重复上述3 CTE的,但有不同的条件来比较:
t1A (ROWNUM, PARTNO, LOCNAM, LOCCODE, QTY) AS
(
SELECT rownumber() over(partition by s2.LOCPART), s2.LOCPART, s2.LOCNAM, s2.LOCCODE, s2.LOCQTY
FROM (
SELECT distinct s1.LOCPART, L.LOCNAM, L.LOCCODE, L.LOCQTY
FROM(
SELECT COUNT(LOCPART) AS counts, LOCPART
FROM LOCATIONS
WHERE LOCCODE = 'A'
GROUP BY LOCPART) S1, LOCATIONS L
WHERE S1.COUNTS > 1 AND S1.LOCPART = L.LOCPART AND L.LOCCODE = 'A'
)s2
),
t2A(PARTNO, LIST, QTY, CODE, CNT) AS
(
select PARTNO, LOCNAM, QTY, LOCCODE, 1
from t1A
where ROWNUM = 1
UNION ALL
select t2A.PARTNO, t2A.LIST || ', ' || t1A.LOCNAM, t1A.QTY, t1A.LOCCODE, t2A.CNT + 1
FROM t2A, t1A
where t2A.PARTNO = t1A.PARTNO
AND t2A.CNT + 1 = t1A.ROWNUM
),
t3A(PARTNO, LIST, QTY, CODE, CNT) AS
(
select t2.PARTNO, t2.LIST, q.SQTY, t2.CODE, t2.CNT
from(
select SUM(QTY) as SQTY, PARTNO
FROM t1A
GROUP BY PARTNO
) q, t2A t2
where t2.PARTNO = q.PARTNO
)
使用这些,我只是简单地选择一个CTE进行测试,每当我有超过9个CTE(即使只有一个被调用)时,我都会得到错误。
在AS400错误(绿屏快照)中,QDT代表什么,何时在这里使用Array?
QDT =查询定义模板。我相信它与查询计划相似。 –
啊好吧谢谢。对我来说,这听起来像是说sql语句太长的复杂方式,但我认为它会更具体。也许CTE被存储在一个数组中? – eaglei22
我知道我之前打过嵌套表限制,也许这就是发生了什么。我不认为SQL语句太长,可能是2 Mb。在单个视图内嵌套256个表和视图。这可能是一个单独的表被多次计数。它也可能包含内部生成的表格。我记得当我达到这个限制时,无法在256桌附近的任何位置进行计数。 CTE的可能是相似的,虽然我找不到任何具体的文件来验证。 – jmarkmurphy