基于列值的递归CTE

时间:2018-08-20 15:51:07

标签: sql oracle common-table-expression recursive-query

我对递归CTE感到困惑,但宁愿使用递归CTE而不是while循环。

我有一个疫苗表,并且仅当该特定行或疫苗记录满足VALIDDOSE = 1的条件(如果有效剂量= 0)时,才希望对该行执行“联合所有”工会。

每行代表一次疫苗事件,VALIDDOSE列由另一个CTE填充。

http://sqlfiddle.com/#!4/a7f73/3

我收到以下错误消息:

  

ORA-32044:执行带有查询的递归

时检测到周期

我不确定自己做错了什么,而且由于我不知道总共将要接种多少疫苗,因此我创建了<10的最终条件。

不确定我是否能清楚地说明自己,所以如果您需要更多详细信息,请告诉我。

WITH CTE1 (PATNO, DOB, IMMUNIZATIONDATE, DOSE, AGEOFDOSE1, PRIORDOSE, NEXTDOSE,   VALIDDOSE, LVL)  
AS (    
SELECT  PATNO,   
      DOB,   
      IMMUNIZATIONDATE,   
      DOSE,   
      AGEOFDOSE1,   
      PRIORDOSE,   
      NEXTDOSE,  
      VALIDDOSE,  
      1 AS LVL  

FROM      VALIDHPV T1   
WHERE     DOSE IN (1)  

UNION ALL  

SELECT  CTE1.PATNO,   
        CTE1.DOB,   
        CTE1.IMMUNIZATIONDATE,   
        CTE1.DOSE,  
        CTE1.AGEOFDOSE1,     
        CTE1.PRIORDOSE,   
        CTE1.NEXTDOSE,  
        CTE1.VALIDDOSE,  
        CTE1.LVL + 1  
FROM CTE1  
INNER JOIN VALIDHPV T2 ON   
          (CTE1.PATNO = T2.PATNO  
       AND CTE1.DOSE <> T2.DOSE  
          )  

WHERE CTE1.DOSE < 10  
  AND CTE1.VALIDDOSE IN (1)  
)  
SELECT * FROM CTE1

0 个答案:

没有答案