Lorsque vous utilisez des relevés préparés à l'intérieur des procédures stockées, devraient-ils être traités à la fin de la procédure ou non, ou cela n'a-t-il pas d'importance, et pourquoi?
Certains code pour expliquer: P>
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 $$
3 Réponses :
Merci ... tandis que ce n'est pas une grande partie d'une "pourquoi", c'est certainement la meilleure réponse du lot;)
MySQL DOCS dit également: "Une déclaration préparée est également globale à la session. Si vous créez une déclaration préparée dans une routine stockée, Il n'est pas distribué lorsque la routine stockée se termine. I>". Par conséquent, je serais explicitement interrompu après une exécution de finition.
@Yasir ne serait-il pas une bonne chose cependant, de ne pas les interdiser? Parce que la manière dont les procédures stockées ne doivent pas nécessairement être recompilées lorsque la procédure stockée est utilisée dans la connexion de base de données suivante, cela aurait-il un sens?
Si vous utilisez la mise en commun de la connexion, il est certainement une bonne idée de les interdire. P>
Cela ne peut pas avoir raison: ce serait un risque de sécurité fondamental en cas de réutilisation d'une connexion en raison de la mise en commun Exposé Toutes les informations i> liées à une session précédente. Par conséquent, la répartition documentée à la fin d'une session doit être i> avant qu'une connexion soit réutilisée à partir du pool.
Les déclarations préparées de translocation dans les routines stockées sont les meilleures pratiques. P>
Les déclarations préparées sont globales à une session et ne sont pas automatiquement distribuées lorsqu'une routine stockée se termine. P>
Si vous avez une déclaration préparée trop créée mais non traitée, vous pourriez rencontrer / dépasser la limite max_prepared_stmt_count P>