Domanda

Come posso utilizzare istruzioni SQL dinamiche nel database MySQL e senza l'utilizzo di variabili di sessione?

In questo momento ho un tale codice (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 
(...)

Ma mi piacerebbe usare solo le variabili locali, questo significa che mi piacerebbe iniziare questa procedura con:

DECLARE TableName VARCHAR(32);
DECLARE s VARCHAR(1024);
DECLARE SelectedId INTEGER UNSIGNED;
(...)

e non utilizzare @ char ovunque. Esiste un modo per fare questo?

È stato utile?

Soluzione

Siamo spiacenti, istruzioni preparate in MySQL sono session-global. Secondo http: //dev.mysql. com / doc / refman / 5.1 / it / sql-sintassi-preparato statements.html , "Una dichiarazione preparata è anche globale alla sessione."

E non c'è altro modo (a parte le istruzioni preparate) per eseguire SQL dinamico in MySQL 5.x.

Così si può ovviamente sostituire "@S" di cui sopra, ma per quanto ne so sei bloccato con @SelectedId.

In MySQL 6.x, v'è una caratteristica programmata che aggiungerà una dichiarazione "EXECUTE IMMEDIATE" che eseguirà SQL dinamico. Vedere http://forge.mysql.com/worklog/task.php?id = 2793 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top