¿Cómo construye y usa sql dinámico en un procedimiento almacenado de MySQL?Cómo tener SQL dinámico en MySQL Procedimiento almacenado
Respuesta
No creo que MySQL sea compatible con SQL dinámico. Puede hacer declaraciones "preparadas" que son similares, pero diferentes.
Aquí se muestra 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 se utilizan a menudo para ver un plan de ejecución para una consulta determinada. Dado que se ejecutan con el ejecutan el comando y el sql se puede asignar a una variable, puede aproximar el mismo comportamiento que el sql dinámico.
Aquí es un buen link en esto:
No se olvide de desasignar la stmt
utilizando la última línea!
¡Buena suerte!
Después 5.0.13, en los procedimientos almacenados, puede utilizar 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 factores desencadenantes. Ver the MySQL documentation para más usos.
Puede pasar a través de fuera de la sentencia dinámica utilizando variables de 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)
- 1. Cursor dinámico en el procedimiento almacenado
- 2. Nombre de procedimiento almacenado dinámico linq a sql
- 3. ¿Cómo editas un procedimiento almacenado en MySQL?
- 4. ¿Se pueden crear activadores MySQL con SQL dinámico desde un procedimiento almacenado?
- 5. MySQL: IF en el procedimiento almacenado
- 6. resultados de SQL dinámico en tabla temporal en SQL procedimiento almacenado
- 7. Ejecución del procedimiento almacenado sincronizado en mysql
- 8. Ejecutar procedimiento almacenado en SQL Developer?
- 9. MySQL Cómo INSERTAR EN [tabla temporal] FROM [Procedimiento almacenado]
- 10. Cómo crear un procedimiento almacenado dentro de otro procedimiento almacenado en SQL Server 2008
- 11. MySQL Procedimiento almacenado vs. consulta compleja
- 12. Cómo simular una impresión en un procedimiento almacenado de MySQL
- 13. ¿Puedo tener un parámetro OUTPUT opcional en un procedimiento almacenado?
- 14. Llamar a un procedimiento almacenado en un procedimiento almacenado en MySQL
- 15. ¿Cómo devolver valores desde un Procedimiento almacenado de SQL dinámico al Entity Framework?
- 16. ¿Cómo obtengo Linq to SQL para reconocer el conjunto de resultados de un Procedimiento almacenado dinámico?
- 17. ¿El procedimiento almacenado de MySQL causa problemas?
- 18. LINQ to SQL: Resultados del procedimiento almacenado
- 19. ¿Cómo programar un procedimiento almacenado?
- 20. Procedimiento almacenado T-SQL If boolean check
- 21. MySQL - ¿Cómo lanzar una excepción en el procedimiento almacenado?
- 22. Imprimir información de depuración del procedimiento almacenado en MySQL
- 23. T-SQL Omitir Tomar Procedimiento almacenado
- 24. Procedimiento almacenado al ejecutar otro procedimiento almacenado
- 25. MS SQL: Suprime el valor devuelto del procedimiento almacenado llamado en el procedimiento almacenado
- 26. Cómo utilizar el procedimiento almacenado en SqlCE
- 27. Ver definición de procedimiento/función almacenado en MySQL
- 28. SQL Server: transacción de procedimiento almacenado
- 29. SQL Server procedimiento almacenado guía para principiantes
- 30. Cómo llamar a un procedimiento almacenado desde otro procedimiento almacenado?
no funciona cuando el '?' Se encuentra en el lugar del nombre de la tabla –
¿Estás tratando esto a través de la consola mysql? o utilizando otro método, si está usando esto en el código, su proveedor debería ser compatible. –
Aparentemente, están estudiando [EXECUTE IMMEDIATE] (http://dev.mysql.com/worklog/task/?id=2793) para versiones futuras. –