如何在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. MySQL存儲過程動態sql結果
- 2. 如何在存儲過程的動態SQL中使用LIKE?
- 3. 如何使用SQL存儲過程選擇動態日期
- 4. 存儲過程中的動態sql
- 5. 在SQL存儲過程中動態使用「USE [Database]」語句
- 6. 在動態SQL中使用RETURN退出存儲過程
- 7. 在存儲過程中使用動態SQL臨時表
- 8. 在存儲過程中使用帶有動態SQL的遊標
- 9. pl/sql - 在存儲過程中使用動態查詢
- 10. 在存儲過程中使用動態SQL?
- 11. 如何在SQL Server存儲過程中創建動態參數
- 12. 如何在SQL Anywhere中創建動態存儲過程?
- 13. T-SQL如何在存儲過程中動態創建表?
- 14. 如何動態調用存儲過程?
- 15. 存儲過程從動態sql創建存儲過程
- 16. LINQ to SQL調用使用動態SQL的存儲過程
- 17. MySQL的 - NULL值檢查和動態SQL存儲過程中
- 18. Mysql(5.1.41)存儲過程中的動態SQL問題
- 19. 存儲過程中的Case語句中使用的動態SQL
- 20. 如何在SQL Server存儲過程中使用動態構建的PK
- 21. 如何使用存儲過程動態地在SQL Server中插入列?
- 22. 如何使用ODP.NET在存儲過程中從Oracle動態SQL返回記錄
- 23. 如何在存儲過程的t-sql動態語句中使用LIKE?
- 24. SQL:在存儲過程中使用存儲過程
- 25. SQL在MySQL中存儲過程php
- 26. 如何使用從MYSQL存儲過程
- 27. Mysql存儲過程動態查詢
- 28. 錯誤在存儲過程的參數時動態SQL使用
- 29. 如何在Mysql存儲過程動態選擇表
- 30. 可以使用存儲過程中的動態SQL創建MySQL觸發器嗎?
它不工作通通過動態語句外,當`?`是在表名 – 2010-01-11 19:50:04