Ich weiß, dass Sie ausdrücklich gefragt haben, wie man das ohne macht eine vom Benutzer erstellte Variable - aber für andere, die auf diesen Gedanken stoßen, wäre es wert, zu posten, wie man es mit macht one, da es ziemlich einfach ist:
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
Erklärung
Der @recursion_depth
Session-Scope-Variable wird durch das obige SET
inkrementiert -Anweisung jedes Mal, wenn die gespeicherte Prozedur eingegeben wird. Bei der ersten Eingabe ist die Variable nicht initialisiert und hat daher den Wert NULL
- Dies wird von IFNULL()
überprüft , die es in diesem Fall einem zuweist. Am Ende der gespeicherten Prozedur, kurz vor dem Beenden, muss die Tiefe dekrementiert werden.
Weitere Hinweise
Erwähnenswert ist, dass SQL Server das tut Stellen Sie einen eingebauten @@NESTLEVEL
bereit Variable, um das obige zu tun - aber leider scheint MySQL kein Äquivalent zu haben.