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