Pregunta

¿Cómo puedo utilizar sentencias SQL dinámicas en la base de datos MySQL y sin utilizar variables de sesión?

En este momento tengo un código de este tipo (en MySQL procedimiento almacenado):

(...)
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 
(...)

Pero me gustaría utilizar sólo las variables locales, eso significa que me gustaría comenzar con este procedimiento:

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

y no utilice carácter @ en cualquier lugar. ¿Hay alguna manera de hacer esto?

¿Fue útil?

Solución

Lo sentimos, en declaraciones preparadas de MySQL son-sesión global. De acuerdo con http: //dev.mysql. com / doc / RefMan / 5.1 / es / sql-sintaxis-statements.html preparado , "Una declaración preparada también es global para la sesión."

Y no hay otra manera (además de las declaraciones preparadas) para ejecutar SQL dinámico en MySQL 5.x

Así que por supuesto puede reemplazar "@s" más arriba, pero que yo sepa que está pegado con @SelectedId.

En MySQL 6.x, hay una característica planificada que añadir una sentencia "EXECUTE IMMEDIATE" que ejecutará SQL dinámico. Ver http://forge.mysql.com/worklog/task.php?id = 2793 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top