sql >> Database >  >> RDS >> Oracle

Foutmelding krijgen als ORA-32044:cyclus gedetecteerd tijdens het uitvoeren van recursieve WITH-query

Uw code werkt prima, behalve voor één gegevensvoorwaarde, namelijk wanneer uw to_customer (1000022560394) zelf de transactie heeft gestart en na een bepaald transactieniveau alleen aan hem wordt teruggegeven.

Bijv-Voorbeeldgegevensset

In dit geval zal uw recursieve deel van de zoekopdracht alle voorwaarden waar vinden, zelfs aan het einde van de transactie, want de gegevens staan ​​zowel in uw normale tabel als in de incrementele dataset.

Eén oplossing is om een ​​wedstrijdvlag te maken om het aantal ontmoetingen te bepalen en een oneindige lus te vermijden:

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;  



  1. Hoe u alle rechten op een database in MySQL kunt verlenen

  2. Verschillende LISTAGG die zich in een subquery in de SELECT-lijst bevindt

  3. MySQL Full Text Search komt niet overeen

  4. php- krijg laatste invoeg-ID