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

Får fejl som ORA-32044:cyklus opdaget under udførelse af rekursiv MED forespørgsel

Din kode vil fungere fint, bortset fra kun én databetingelse, det vil sige, når din to_customer (1000022560394) selv har startet transaktionen i første omgang, og efter en vis grad af transaktion bliver den kun returneret til ham.

F.eks.-Sample Data Set

I dette tilfælde vil din rekursive del af forespørgslen finde alle dens betingelser sande, selv i slutningen af ​​transaktionen, for dataene vil være der både i din normale tabel og inkrementelle datasæt.

En løsning er at oprette et match-flag for at bestemme antallet af møder og undgå uendelig sløjfe:

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. MySQL-serveren er forsvundet med Ruby on Rails

  2. Kald sp_executesql med varchar parameter

  3. sqlalchemy skaber VIEW med ORM

  4. Rediger Django AutoField-startværdi