我对递归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