2009-07-22 7 views
5

Lorsque vous utilisez des instructions préparées dans des procédures stockées, doivent-elles être désallouées à la fin de la procédure ou non, ou ne sont-elles pas importantes, et pourquoi?Les instructions préparées doivent-elles être désaffectées lorsqu'elles sont utilisées dans des procédures stockées?

code pour expliquer:

CREATE PROCEDURE getCompanyByName (IN name VARCHAR(100)) 
NOT DETERMINISTIC 
BEGIN 
    PREPARE gcbnStatement FROM 'SELECT * FROM Companies WHERE name=? LIMIT 1'; 
    SET @companyName = name; 
    EXECUTE gcbnStatement USING @companyName; 
    DEALLOCATE PREPARE gcbnStatement; 
END $$ 

Donc - la déclaration doit DEALLOCATE être là ou non? À votre santé!

/Victor

Répondre

5

Selon le MySQL docs:

Une instruction préparée est spécifique à la session dans laquelle il a été créé. Si vous terminez une session sans désaffectant une instruction précédemment préparée, le serveur la libère automatiquement .

Donc, non, je ne voudrais pas le faire explicitement, sauf si vous avez des sessions très longues.

+0

Merci ... Bien que ce ne soit pas un "pourquoi" c'est certainement la meilleure réponse du lot;) – Victor

+0

MySQL docs dit aussi: "Une instruction préparée est aussi globale à la session. une routine stockée, _it n'est pas désaffectée lorsque la routine stockée se termine._ ". Par conséquent, je libérerais explicitement après avoir fini l'exécution. – Yasir

1

Si vous utilisez le regroupement de connexions, il est certainement conseillé de les libérer.

+0

Ok, merci. Informatif. – Victor

Questions connexes