Oracle
 sql >> база данни >  >> RDS >> Oracle

Получаване на грешка като ORA-32044:открит цикъл при изпълнение на рекурсивна заявка WITH

Вашият код ще работи добре, с изключение само на едно условие за данни, което е, когато вашият to_customer (1000022560394) сам е започнал транзакцията на първо място и след известно ниво на транзакция тя се връща само на него.

Например-Примерен набор от данни

В този случай вашата рекурсивна част от заявката ще намери всички условия за верни дори в края на транзакцията, тъй като данните ще бъдат там както в нормалната ви таблица, така и в инкременталния набор от данни.

Едно решение е да се създаде флаг за съвпадение, за да се определи броят му на срещи и да се избегне безкраен цикъл:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли начин да създадете множество тригери в един скрипт?

  2. Как да изберете няколко реда в JSON низова променлива?

  3. Получаване на последния ден от предишния месец във функцията на Oracle

  4. Клауза OVER в Oracle

  5. Извличане на реда, който има максимална стойност за колона