sql >> Databáze >  >> RDS >> Mysql

Při používání uložené procedury v MySQL dochází ke dvěma problémům

To je to omezení.

Nyní řešení:přidejte vnořený BEGIN ... END blokovat.

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 $$

Všechny proměnné ve vnějším bloku jsou stále v rozsahu ve vnitřním bloku, pokud jiná proměnná ve vnitřním bloku nemá konfliktní název.

OBSLUHAČ ve vnějším bloku je také v rozsahu pro signály ve vnitřním bloku, pokud tam není deklarován konfliktní handler, v takovém případě vnitřní handler zachytí výjimku a vnější handle zachytí vše, co vnitřní handler hodí, včetně RESIGNAL .

Je povoleno více úrovní vnoření. Velikost thread_stack může to být faktor, ale dokumentace je nejasná. Spouštěl jsem 262 144 bajtové zásobníky vláken od doby, než to bylo nastaveno jako výchozí, a nikdy jsem nenarazil na limit.



  1. GroupBy po orderBy pro komplikovaný dotaz v Laravelu

  2. Jak zobrazit znaky UTF-8 v phpMyAdmin?

  3. Jak rozdělit příkazy Oracle SQL pro ADO.NET

  4. Získejte záznam v maximální datum každého měsíce