Jeg ved, at du specifikt spurgte, hvordan du gør dette uden en brugerskabt variabel - men for andre, der støder på denne tanke, ville det være værd at skrive, hvordan man gør det med en, da det er ret simpelt:
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
Forklaring
@recursion_depth
session-omfanget variabel øges med ovenstående SET
erklæring hver gang den lagrede procedure indtastes. Første gang den indtastes, er variablen ikke-initialiseret og har derfor en værdi på NULL
- dette kontrolleres af IFNULL()
, som omtildeler den til en i dette tilfælde. Ved afslutningen af den lagrede procedure lige før du afslutter, skal dybden nedsættes.
Yderligere bemærkninger
Værd at bemærke, at SQL Server gør Angiv en indbygget @@NESTLEVEL
variabel for at gøre ovenstående - men desværre ser MySQL ikke ud til at have en tilsvarende.