【发布时间】:2014-01-09 21:22:51
【问题描述】:
我正在使用下面的递归函数,它将循环超过 4500 次。在每次迭代中,代码将提取超过 50 条记录。
WITH RECURSIVE RECEMP (
EMP_ID,
EMP_DB,
lvl,
LEVEL
)
AS (
SELECT EMP_ID,
EMP_DB,
lvl,
1 (INT)
FROM EDW_MAN_WORK.emp --WHERE EMP_ID = 12
UNION ALL
SELECT E.EMP_ID,
E.EMP_DB,
E.lvl,
R.LEVEL + 1
FROM EDW_MAN_WORK.emp E
INNER JOIN RECEMP R
ON E.EMP_ID = R.EMP_ID
AND R.LEVEL <= r.lvl
)
SELECT EMP_ID,
EMP_DB,
Lvl,
LEVEL
FROM RECEMP
由于 SPOOL 空间错误,我的查询失败。我们可以在递归表上收集统计信息吗?
我也尝试过使用存储过程,但这同样非常耗时。
请提出一种替代方法。
【问题讨论】:
-
您的查询失败,因为它返回每一行 lvl + 1 次,因此您可以使用交叉连接轻松地将其重写为数字表。但是为什么需要这个结果集呢?您能否详细说明您实际尝试实现的目标?