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?

War es hilfreich?

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top