sql >> データベース >  >> RDS >> Oracle

ORA-32044 としてエラーを取得:再帰的な WITH クエリの実行中にサイクルが検出されました

    あなたのコードは、to_customer (1000022560394) 自身が最初にトランザクションを開始し、あるレベルのトランザクションの後、彼にのみ返されるという 1 つのデータ条件を除いて、正常に機能します。

    例-サンプル データ セット

    この場合、データは通常のテーブルと増分データセットの両方に存在するため、クエリの再帰部分は、トランザクションの最後でもすべての条件が真であることがわかります。

    解決策の 1 つは、マッチ フラグを作成して遭遇数を決定し、無限ループを回避することです:

    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. PostgreSQLのカスタム集計関数

    2. MariaDBのHOUR()とEXTRACT(HOUR…):違いは何ですか?

    3. SQL Server 2005 ストアド プロシージャのコンテンツを検索できますか?

    4. Laravelモデルを使用してデータベースビューにアクセスするにはどうすればよいですか?