Oracle
 sql >> Database >  >> RDS >> Oracle

Ricezione di errore come ORA-32044:ciclo rilevato durante l'esecuzione della query CON ricorsiva

Il tuo codice funzionerà bene tranne che per una condizione di dati che è quando il tuo to_customer (1000022560394) stesso ha iniziato la transazione in primo luogo e dopo un certo livello di transazione gli è stata restituita solo.

Ad esempio-Set di dati di esempio

In questo caso, la tua parte ricorsiva della query troverà tutte le sue condizioni vere anche al termine della transazione, poiché i dati saranno presenti sia nella tabella normale che nel set di dati incrementale.

Una soluzione è creare una bandiera di corrispondenza per determinarne il numero di incontri ed evitare un ciclo infinito:

WITH EmpsCTE (affiliation_id, from_customer_id,to_customer_id, to_name,level1,match_count)  
AS  
(  
SELECT affiliation_id, from_customer_id,to_customer_id, to_name, 0, 0 match_count  
 FROM affiliation aff  
 WHERE to_customer_id != from_customer_id  
 and to_customer_id = 1000022560394  
UNION ALL  
SELECT aff.affiliation_id, aff.from_customer_id,aff.to_customer_id, aff.to_name, m.level1 + 1,1 match_count  
 FROM affiliation aff  
 INNER JOIN EmpsCTE  m  
 ON aff.to_customer_id = m.from_customer_id  
 where m.match_count=0  
)  
SELECT * FROM EmpsCTE;