Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtendo dois problemas ao usar o procedimento armazenado no MySQL


Essa é a restrição.

Agora, a solução alternativa:adicione um BEGIN ... END aninhado bloquear.
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 $$

Todas as variáveis ​​no bloco externo ainda estão no escopo do bloco interno, a menos que outra variável no bloco interno tenha um nome conflitante.

Um MANIPULADOR no bloco externo também está no escopo de sinais no bloco interno, a menos que um manipulador conflitante seja declarado lá; nesse caso, o manipulador interno capturará a exceção e o manipulador externo capturará qualquer coisa lançada pelo manipulador interno, incluindo um RESIGNAL .

Vários níveis de aninhamento são permitidos. O tamanho do thread_stack pode ser um fator, mas a documentação não é clara. Estou executando pilhas de threads de 262.144 bytes desde antes de se tornar o padrão e nunca encontrei um limite.