なしでこれを行う方法を具体的に尋ねられたと思います ユーザーが作成した変数-しかし、この考えに出くわした他の人にとっては、でそれを行う方法を投稿する価値があるでしょう。 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には同等のものがないようです。