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

Pojawiają się dwa problemy podczas korzystania z procedury składowanej w MySQL

To jest ograniczenie.

Teraz obejście:dodaj zagnieżdżony BEGIN ... END blokować.

DELIMITER $$
CREATE PROCEDURE ...
BEGIN
  DECLARE ... INT ... -- variable
  CREATE TEMPORARY TABLE... -- following the declarations, no more declarations allowed, unless...
  BEGIN -- resets the scope, changes the rules, allows more declarations
    DECLARE ... INT ... -- variables
    DECLARE ... CURSOR ...
    DECLARE CONTINUE HANDLER ...
    OPEN ...
    ...
  END;
END $$

Wszystkie zmienne w bloku zewnętrznym są nadal objęte zakresem w bloku wewnętrznym, chyba że inna zmienna w bloku wewnętrznym ma sprzeczną nazwę.

OBSŁUGA w bloku zewnętrznym jest również w zakresie sygnałów w bloku wewnętrznym, chyba że jest tam zadeklarowana procedura obsługi powodująca konflikt, w którym to przypadku wewnętrzna procedura obsługi przechwyci wyjątek, a zewnętrzny uchwyt przechwyci wszystko, co zostanie wyrzucone przez wewnętrzną procedurę obsługi, w tym RESIGNAL .

Dozwolonych jest wiele poziomów zagnieżdżenia. Rozmiar thread_stack może być czynnikiem, ale dokumentacja jest niejasna. Używam 262,144 bajtowych stosów wątków, zanim stało się to domyślne i nigdy nie napotkałem limitu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aktualizacja SQL przy aktualizacji zduplikowanych kluczy

  2. Nie możesz utworzyć połączenia z bazą danych GlassFish za pomocą Netbeans?

  3. Kolejność wykonania zapytania / klauzuli MySQL

  4. Błąd nie można przywrócić kopii zapasowej geometrii MySQL 5.7

  5. Problem z sortowaniem mysql-python:jak wymusić typ danych unicode?