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

Ottenere due problemi durante l'utilizzo della procedura memorizzata in MySQL

Questa è la restrizione.

Ora, la soluzione alternativa:aggiungi un BEGIN ... END annidato blocco.

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

Tutte le variabili nel blocco esterno sono ancora nell'ambito del blocco interno, a meno che un'altra variabile nel blocco interno non abbia un nome in conflitto.

Un HANDLER nel blocco esterno rientra anche nell'ambito dei segnali nel blocco interno, a meno che non vi sia dichiarato un gestore in conflitto, nel qual caso il gestore interno catturerà l'eccezione e l'handle esterno catturerà qualsiasi cosa lanciata dal gestore interno, incluso un RESIGNAL .

Sono consentiti più livelli di annidamento. La dimensione del thread_stack potrebbe essere un fattore, ma la documentazione non è chiara. Ho eseguito stack di thread da 262.144 byte da prima che fosse impostato come predefinito e non ho mai incontrato un limite.