2009-07-22 14 views
5

Quando si usano istruzioni preparate all'interno di stored procedure, dovrebbero essere deallocate alla fine della procedura o no, o non importa, e perché?Le dichiarazioni preparate devono essere deallocate quando vengono utilizzate all'interno di stored procedure?

del codice per spiegare:

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

Così - dovrebbe la dichiarazione DEALLOCATE essere lì o no? Saluti!

/Victor

risposta

5

Secondo il MySQL docs:

Una dichiarazione preparata è specifico per la sessione in cui è stato creato. Se si termina una sessione senza deallocando una dichiarazione preparata in precedenza, il server la rilascia automaticamente .

Quindi, no, non mi preoccuperei di farlo esplicitamente, a meno che tu non abbia sessioni di lunga durata.

+0

Grazie ... Anche se non è tanto un "perché", è sicuramente la migliore risposta del lotto;) – Victor

+0

I documenti MySQL dicono anche: "Una dichiarazione preparata è anche globale per la sessione. una routine memorizzata, _it non viene deallocato quando termina la routine memorizzata. " Pertanto, vorrei esplicitamente deallocare dopo aver terminato l'esecuzione. – Yasir

1

Se si utilizza il pool di connessioni, è sicuramente una buona idea deallocarle.

+0

Ok, grazie. Informativo. – Victor

Problemi correlati