Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtenir deux problèmes lors de l'utilisation d'une procédure stockée dans MySQL

C'est la restriction.

Maintenant, la solution de contournement :ajoutez un BEGIN ... END imbriqué bloquer.

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

Toutes les variables du bloc externe sont toujours dans la portée du bloc interne, à moins qu'une autre variable du bloc interne ait un nom en conflit.

Un HANDLER dans le bloc externe est également dans la portée des signaux dans le bloc interne, à moins qu'un gestionnaire en conflit n'y soit déclaré, auquel cas le gestionnaire interne interceptera l'exception et le gestionnaire externe interceptera tout ce qui est lancé par le gestionnaire interne, y compris un RESIGNAL .

Plusieurs niveaux d'imbrication sont autorisés. La taille de thread_stack pourrait être un facteur, mais la documentation n'est pas claire. J'exécute des piles de threads de 262 144 octets depuis avant qu'il ne devienne la valeur par défaut et je n'ai jamais rencontré de limite.