2009-07-22 14 views
5

Al usar declaraciones preparadas dentro de los procedimientos almacenados, ¿deberían desasignarse al final del procedimiento o no, o no importa, y por qué?¿Deben desasignarse las declaraciones preparadas cuando se usan dentro de procedimientos almacenados?

algo de código para explicar:

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

Por lo tanto - la declaración debe DEALLOCATE estar allí o no? ¡Aclamaciones!

/Victor

Respuesta

5

De acuerdo con la MySQL docs:

Una declaración preparada es específico para la sesión en la que fue creada. Si finaliza una sesión sin desasignando una instrucción previamente preparada , el servidor la desasigna automáticamente .

Así que, no, no me molestaría en hacerlo explícitamente, a menos que tenga sesiones muy largas.

+0

Gracias ... Si bien no es un gran "por qué", sin duda es la mejor respuesta del lote;) – Victor

+0

MySQL documentos también dice: "Una declaración preparada también es global para la sesión. Si crea una declaración preparada dentro una rutina almacenada, _it no se desasigna cuando la rutina almacenada finaliza._ ". Por lo tanto, me desasignaría explícitamente después de terminar la ejecución. – Yasir

1

Si usa la agrupación de conexiones, definitivamente es una buena idea desasignarlas.

+0

Ok, gracias. Informativo. – Victor

Cuestiones relacionadas