MySQL dinámico con variables locales
-
16-09-2019 - |
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?
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 .