Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Gặp lỗi là ORA-32044:chu kỳ được phát hiện trong khi thực hiện truy vấn đệ quy VỚI

Mã của bạn sẽ hoạt động tốt chỉ ngoại trừ một điều kiện dữ liệu đó là khi chính khách hàng của bạn (1000022560394) đã bắt đầu giao dịch ngay từ đầu và sau một số cấp độ giao dịch, nó sẽ chỉ được trả lại cho anh ta.

Ví dụ: Tập dữ liệu mẫu

Đối với trường hợp này, phần truy vấn Đệ quy của bạn sẽ tìm thấy tất cả các điều kiện của nó đúng ngay cả khi kết thúc giao dịch, vì dữ liệu sẽ ở đó cả trong bảng bình thường và tập dữ liệu gia tăng của bạn.

Một giải pháp là tạo cờ đối sánh để xác định số lần chạm trán của nó và tránh vòng lặp vô hạn:

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. Các tính năng ẩn trong Oracle

  2. SQL:Liên hợp hai bảng không khớp đầy đủ cột

  3. Oracle 12:Tham gia vào danh sách được phân tách bằng dấu phẩy?

  4. Cách tạo biến kiểu dữ liệu bản ghi do người dùng xác định trong cơ sở dữ liệu Oracle

  5. Truy vấn Oracle để lấy ID giao dịch đầu tiên dựa trên giao dịch gửi đi đã sử dụng