Mysql
 sql >> Database >  >> RDS >> Mysql

Come ottenere profondità nella ricorsione della procedura del negozio mysql?

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.