sql >> Base de Datos >  >> RDS >> Oracle

Obteniendo el error como ORA-32044:ciclo detectado al ejecutar la consulta recursiva CON

Su código funcionará bien excepto solo por una condición de datos que es cuando su to_customer (1000022560394) haya iniciado la transacción en primer lugar y después de algún nivel de transacción se le devuelva solo a él.

Por ejemplo, Conjunto de datos de muestra

En este caso, la parte recursiva de la consulta encontrará que todas sus condiciones son verdaderas incluso al final de la transacción, ya que los datos estarán allí tanto en la tabla normal como en el conjunto de datos incremental.

Una solución es crear una bandera de coincidencia para determinar su número de encuentros y evitar bucles infinitos:

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;