Sql oracle中的CTE周期错误
我有一个标签Sql oracle中的CTE周期错误,sql,oracle,common-table-expression,Sql,Oracle,Common Table Expression,我有一个标签del CMPI_CODE CMPI_ID_REF ---------- ----------- 51 52 51 53 54 55 56 57 58
del
CMPI_CODE CMPI_ID_REF
---------- -----------
51
52 51
53
54
55
56
57
58
59
60
61
62
81
82 61
83
84
--
这类代码显示错误SQL错误:ORA-32044:执行递归WITH查询时检测到循环Oracle不使用与SQL server相同的语法执行分层查询,WITH关键字用于不同的用途
要执行分层查询,请使用以下查询:
SELECT DEL.*, level as LVL
FROM
DEL
CONNECT BY PRIOR
CMPI_CODE = CMPI_ID_REF
START WITH
CMPI_ID_REF IS NULL;
您似乎在递归成员中选择了错误的值。仅查看前两行,锚定成员将获得A,B,LVL
作为51,null,0
。第一个递归成员将使用51
获取第二行;但是你选择了A,B,LVL+1
,这样就会得到51,null,1
。然后下一个会得到同样的。。。因此循环。因此,您需要选择:
UNION ALL SELECT F.CMPI_CODE,CMPI_ID_REF,LVL+1 FROM RSFC R
INNER JOIN DEL F ON R.A = F.CMPI_ID_REF
基于你的。不确定这是否是您想要的最终结果。您可以设置一个显示此错误的SQL FIDLE吗?Oracle从11.2版开始就支持递归CTE(顺便说一句:递归CTE和WITH
关键字对SQL Server来说并不是什么特别的,它是由SQL标准定义的,许多现代DBMS都支持这一点)收到的错误消息似乎明确允许递归查询(但出于明显的原因,不允许无限循环)。@a_horse_和_no_name哦不知道,我在Oracle的经验似乎有点过时,无论如何,我的查询是一个建议,以不同的方式解决问题。
UNION ALL SELECT F.CMPI_CODE,CMPI_ID_REF,LVL+1 FROM RSFC R
INNER JOIN DEL F ON R.A = F.CMPI_ID_REF