sql >> Databasteknik >  >> RDS >> Mysql

Hur får man djup i mysql-butiksprocedurrekursionen?

Jag vet att du specifikt frågade hur man gör detta utan en användarskapad variabel - men för andra som stöter på detta skulle det vara värt att publicera hur man gör det med en eftersom det är ganska enkelt:

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

Förklaring

@recursion_depth sessionsomfattande variabel ökas med ovanstående SET uttalande varje gång den lagrade proceduren skrivs in. Första gången den skrivs in är variabeln oinitierad och har därför värdet NULL - detta kontrolleras av IFNULL() , som omtilldelar den till en i det här fallet. I slutet av den lagrade proceduren precis innan du avslutar, måste djupet minskas.

Fler anmärkningar

Värt att notera att SQL Server gör tillhandahålla en inbyggd @@NESTLEVEL variabel för att göra ovanstående - men tyvärr verkar MySQL inte ha en motsvarighet.




  1. postgresql port confusion 5433 eller 5432?

  2. Hur man vadderar en sträng med ledande/släpande tecken i MySQL – LPAD(), RPAD()

  3. Hur man skapar ett nytt fält i tabellen när användaren klickar på en länk

  4. MySQL; Bästa datatypen för stora antal