如何在MySQL存储过程中构建和使用动态SQL?如何在MySQL存储过程中使用动态SQL
53
A
回答
42
我不相信MySQL支持动态sql。您可以执行类似但“不同”的“准备好”陈述。
下面是一个例子:
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;
的准备的语句通常用于看到执行计划对于给定的查询。由于它们是通过执行执行命令和sql可以分配给一个变量,您可以近似与动态sql的一些行为。
这里是关于一个很好的link:
不要忘记使用最后一行解除分配stmt
!
祝你好运!
91
5.0.13后,在存储过程中,你可以使用动态SQL:
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不函数或触发器工作。更多用途见the MySQL documentation。
2
您可以使用用户定义的变量
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. 如何在存储过程的动态SQL中使用LIKE?
- 2. 在SQL存储过程中动态使用“USE [Database]”语句
- 3. 在动态SQL中使用RETURN退出存储过程
- 4. pl/sql - 在存储过程中使用动态查询
- 5. 在存储过程中使用带有动态SQL的游标
- 6. 如何在SQL Server存储过程中创建动态参数
- 7. 如何在SQL Anywhere中创建动态存储过程?
- 8. 如何动态调用存储过程?
- 9. LINQ to SQL调用使用动态SQL的存储过程
- 10. Mysql(5.1.41)存储过程中的动态SQL问题
- 11. MySQL的 - NULL值检查和动态SQL存储过程中
- 12. 如何使用存储过程动态地在SQL Server中插入列?
- 13. 如何在存储过程的t-sql动态语句中使用LIKE?
- 14. SQL:在存储过程中使用存储过程
- 15. Mysql存储过程动态查询
- 16. 可以使用存储过程中的动态SQL创建MySQL触发器吗?
- 17. SQL Server动态存储过程
- 18. 动态SQL Server存储过程
- 19. 存储过程动态WHERE条件SQL
- 20. 如何在grails中用动态名称调用mysql存储过程
- 21. 使用动态查询存储过程
- 22. 如何在MySQL中的存储过程中调用存储过程
- 23. 从存储过程中调用存储过程在MySQL中
- 24. 使用Groovy SQL动态调用存储过程
- 25. Powershell:使用动态sql运行存储过程不起作用
- 26. MySQL:无法使用存储过程插入CURRENT_TIMESTAMP - 动态语句
- 27. 如何在mysql中使用while循环调用存储过程
- 28. 何时在存储过程中使用CTE在存储过程
- 29. 在存储过程中动态更新
- 30. 如何获取导致动态MySQL存储过程
它不工作通通过动态语句外,当`?`是在表名 – 2010-01-11 19:50:04