So che hai chiesto espressamente come farlo senza una variabile creata dall'utente, ma per altri che si sono imbattuti in questo pensiero varrebbe la pena pubblicare come farlo con uno perché è abbastanza semplice:
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
Spiegazione
Il @recursion_depth
la variabile con ambito di sessione viene incrementata del SET
sopra istruzione ogni volta che viene immessa la procedura memorizzata. La prima volta che viene inserita, la variabile non viene inizializzata e quindi ha un valore NULL
- questo è verificato da IFNULL()
, che in questo caso lo riassegna a uno. Al termine della procedura memorizzata, poco prima di uscire, è necessario diminuire la profondità.
Ulteriori note
Vale la pena notare che SQL Server fa fornisci un @@NESTLEVEL
integrato variabile per fare quanto sopra - ma sfortunatamente MySQL non sembra avere un equivalente.