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

Hvordan får man dybde i mysql store procedure rekursion?

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.




  1. Hvordan vælger man den n'te række i en SQL-databasetabel?

  2. Ingen funktion matcher det angivne navn og argumenttyper

  3. Indstil tidsdel af en datetime-variabel

  4. com.mysql.jdbc.MysqlDataTruncation:Datatruncation:Data for lange til kolonnen 'column_name'