2009-07-22 10 views
5

Wenn vorbereitete Anweisungen in gespeicherten Prozeduren verwendet werden, sollten sie am Ende des Verfahrens freigegeben werden oder nicht, oder spielt es keine Rolle, und warum?Sollten vorbereitete Anweisungen aufgehoben werden, wenn sie in gespeicherten Prozeduren verwendet werden?

Einige Code zu erklären:

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

So - sollte die AUFLÖSEN Aussage da sein oder nicht? Prost!

/Victor

Antwort

5

Nach dem MySQL docs:

Eine vorbereitete Anweisung ist spezifisch für die Sitzung, in der es erstellt wurde. Wenn Sie eine Sitzung ohne beenden, die eine zuvor vorbereitete -Anweisung rückgängig macht, wird sie vom Server automatisch freigegeben.

Also, nein, ich würde es nicht explizit tun, es sei denn, Sie haben sehr lange Sitzungen.

+0

Dank ... Obwohl es nicht viel von einem "Warum" ist, ist es sicherlich die beste Antwort des Loses;) – Victor

+0

MySQL-Dokumente sagt auch: "Eine vorbereitete Anweisung ist auch global für die Sitzung. Wenn Sie eine vorbereitete Anweisung erstellen eine gespeicherte Routine, es wird nicht freigegeben, wenn die gespeicherte Routine endet. Daher würde ich nach Beendigung der Ausführung explizit die Zuordnung aufheben. – Yasir

1

Wenn Sie Verbindungspooling verwenden, ist es definitiv eine gute Idee, sie zu entfernen.

+0

Ok, danke. Informativ. – Victor

Verwandte Themen