statement query ejecutar mysql dynamic

query - prepare mysql procedure



Cómo tener SQL dinámico en MySQL Procedimiento almacenado (3)

Después de 5.0.13, en procedimientos almacenados, puede usar SQL dinámico:

delimiter // CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64)) BEGIN SET @s = CONCAT(''SELECT '',col,'' FROM '',tbl ); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; END // delimiter ;

SQL dinámico no funciona en funciones o disparadores. Consulte la documentación de MySQL para más usos.

¿Cómo construyes y usas sql dinámico en un procedimiento almacenado de MySQL?


No creo que MySQL admita SQL dinámico. Puede hacer declaraciones "preparadas" que son similares, pero diferentes.

Aquí hay un ejemplo:

mysql> PREPARE stmt FROM -> ''select count(*) -> from information_schema.schemata -> where schema_name = ? or schema_name = ?'' ; Query OK, 0 rows affected (0.00 sec) Statement prepared mysql> EXECUTE stmt -> USING @schema1,@schema2 +----------+ | count(*) | +----------+ | 2 | +----------+ 1 row in set (0.00 sec) mysql> DEALLOCATE PREPARE stmt;

Las declaraciones preparadas a menudo se utilizan para ver un plan de ejecución para una consulta determinada. Como se ejecutan con el comando de ejecución y el sql se puede asignar a una variable, puede aproximarse al comportamiento similar a sql dinámico.

Aquí hay un buen link sobre esto:

¡No olvide desasignar el stmt usando la última línea!

¡Buena suerte!


Puede pasar a través de la declaración dinámica utilizando variables definidas por el usuario

Server version: 5.6.25-log MySQL Community Server (GPL) mysql> PREPARE stmt FROM ''select "AAAA" into @a''; Query OK, 0 rows affected (0.01 sec) Statement prepared mysql> EXECUTE stmt; Query OK, 1 row affected (0.01 sec) DEALLOCATE prepare stmt; Query OK, 0 rows affected (0.01 sec) mysql> select @a; +------+ | @a | +------+ |AAAA | +------+ 1 row in set (0.01 sec)