Dynamische MySQL mit lokalen Variablen
-
16-09-2019 - |
Frage
Wie kann ich dynamische SQL-Anweisungen in MySQL-Datenbank verwenden und ohne Session-Variablen verwenden?
Im Moment habe ich einen solchen Code (in MySQL Stored Procedure):
(...) DECLARE TableName VARCHAR(32); SET @SelectedId = NULL; SET @s := CONCAT("SELECT Id INTO @SelectedId FROM ", TableName, " WHERE param=val LIMIT 1"); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; IF ISNULL(@SelectedId) THEN (...)
Aber ich möchte nur lokale Variablen verwenden, das heißt, ich möchte diesen Vorgang starten mit:
DECLARE TableName VARCHAR(32); DECLARE s VARCHAR(1024); DECLARE SelectedId INTEGER UNSIGNED; (...)
und verwenden Sie nicht @ überall verkohlen. Gibt es eine Möglichkeit, dies zu tun?
Lösung
Sorry, vorbereitete Anweisungen in MySQL sind sitzungs global. Nach http: //dev.mysql. com / doc / refman / 5.1 / de / sQL-Syntax-bereit-statements.html "Eine vorbereitete Anweisung ist auf die Sitzung auch global."
Und es gibt keinen anderen Weg (neben Prepared Statements) dynamische SQL in MySQL 5.x auszuführen
So können Sie natürlich „@s“ ersetzen oben, aber AFAIK sind Sie mit @SelectedId stecken.
In MySQL 6.x gibt es eine Funktion geplant, die eine „EXECUTE IMMEDIATE“ Anweisung hinzufügen, die dynamische SQL ausgeführt wird. Siehe http://forge.mysql.com/worklog/task.php?id = 2793 .