Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uzyskać głębię w rekursji procedury sklepu mysql?

Wiem, że spytałeś, jak to zrobić bez zmienną utworzoną przez użytkownika — ale dla innych, którzy natkną się na tę myśl, warto opublikować, jak to zrobić za pomocą jeden, ponieważ jest dość prosty:

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

Wyjaśnienie

@recursion_depth Zmienna o zasięgu sesji jest zwiększana przez powyższy SET oświadczenie za każdym razem, gdy wprowadzana jest procedura składowana. Przy pierwszym wprowadzeniu zmienna jest niezainicjowana i ma wartość NULL - jest to sprawdzane przez IFNULL() , który w tym przypadku ponownie przypisuje go do jednego. Pod koniec procedury składowanej, tuż przed wyjściem, głębokość należy zmniejszyć.

Dalsze uwagi

Warto zauważyć, że SQL Server robi zapewnij wbudowany @@NESTLEVEL zmienna służąca do wykonania powyższego - ale niestety MySQL nie ma odpowiednika.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie i wyświetlanie danych dla każdego zarejestrowanego użytkownika w PHP za pomocą PDO

  2. Błąd 1215:Nie można dodać ograniczenia klucza obcego

  3. Jak używać ON DUPLICATE KEY UPDATE w MySQL bez indeksu UNIQUE lub PRIMARY KEY?

  4. Zapytanie SQL, aby znaleźć klucz podstawowy tabeli?

  5. Funkcje ciągów MySQL (pełna lista)