Dynamische MySQL mit lokalen Variablen
Wie kann ich die Verwendung dynamischer SQL-Anweisungen in MySQL-Datenbank und ohne Verwendung von session-Variablen?
Jetzt habe ich so einen code (in MySQL gespeicherte Prozedur):
(...) ERKLÄREN, TableName VARCHAR(32); SET @SelectedId = NULL; SET @s := CONCAT("SELECT Id INTO @SelectedId AUS ", TableName, "WHERE param=val LIMIT 1"); PREPARE stmt VON @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; WENN ISNULL(@SelectedId) DANN (...)
Aber ich würde gerne verwenden Sie nur lokale Variablen, das heißt, ich möchte mit diesem Verfahren beginnen mit:
ERKLÄREN, TableName VARCHAR(32); ERKLÄREN s VARCHAR(1024); ERKLÄREN SelectedId INTEGER UNSIGNED; (...)
sind und nicht die Verwendung von @ char überall. Gibt es eine Möglichkeit, dies zu tun?
InformationsquelleAutor ssobczak | 2009-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sorry, prepared statements in MySQL session-global. Nach http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html, "Eine vorbereitete Anweisung ist auch global zu der Sitzung."
Und es gibt keinen anderen Weg (außer prepared statements) zum ausführen von dynamischer SQL im MySQL 5.x.
So kann man natürlich ersetzen Sie "@s" oben, aber AFAIK sind Sie stecken mit @SelectedId.
In MySQL-6.x, es ist eine Funktion geplant, welche add ein "EXECUTE IMMEDIATE" - Anweisung die Ausführung von dynamischem SQL. Sehen http://forge.mysql.com/worklog/task.php?id=2793.
InformationsquelleAutor Justin Grant