sql >> Base de Datos >  >> RDS >> Mysql

Obteniendo dos problemas al usar el procedimiento almacenado en MySQL

Esa es la restricción.

Ahora, la solución alternativa:agregue un BEGIN ... END anidado bloque.

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 las variables en el bloque externo todavía están dentro del alcance del bloque interno, a menos que otra variable en el bloque interno tenga un nombre en conflicto.

UN HANDLER en el bloque externo también está dentro del alcance de las señales en el bloque interno, a menos que se declare allí un controlador en conflicto, en cuyo caso el controlador interno detectará la excepción y el controlador externo detectará cualquier cosa lanzada por el controlador interno, incluido un RESIGNAL .

Se permiten múltiples niveles de anidamiento. El tamaño de thread_stack podría ser un factor, pero la documentación no está clara. He estado ejecutando pilas de subprocesos de 262 144 bytes desde antes de que se convirtiera en predeterminado y nunca he encontrado un límite.