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

mysqlストアプロシージャの再帰で深さを取得するにはどうすればよいですか?

    なしでこれを行う方法を具体的に尋ねられたと思います ユーザーが作成した変数-しかし、この考えに出くわした他の人にとっては、でそれを行う方法を投稿する価値があるでしょう。 1つはかなり単純なので:

    CREATE PROCEDURE sp_recursive
    BEGIN
      // ... DECLAREs here
    
      -- Set maximum recursion depth (max is 255)
      SET @@SESSION.max_sp_recursion_depth = 10;
    
      -- Increment current recursion depth
      SET @recursion_depth = IFNULL(@recursion_depth + 1, 1);
      
      -- ... More stored procedure code
    
      -- Decrement current recursion depth. Note: Care must be taken to ensure this line
      -- is *always* executed at the end of the stored procedure.
      SET @recursion_depth = @recursion_depth - 1;
    END
    

    説明

    @recursion_depth セッションスコープの変数は、上記のSETによってインクリメントされます ストアドプロシージャが入力されるたびにステートメント。初めて入力したとき、変数は初期化されていないため、値はNULLです。 -これはIFNULL()によってチェックされます 、この場合は1つに再割り当てします。終了する直前のストアドプロシージャの最後で、深さを減らす必要があります。

    その他の注意事項

    SQLServerが行うことは注目に値します 組み込みの@@NESTLEVELを提供します 上記を行うための変数ですが、残念ながらMySQLには同等のものがないようです。




    1. MySQL>テーブルが存在しません。しかし、それはします(またはそうすべきです)

    2. Mysql'ストレージエンジンからエラー-1を取得しました'エラー

    3. READ UNCOMMITTED分離レベルを使用するのはなぜですか?

    4. UTF-8でエンコードされたダンプをMySQLにロードする