MySQL 存储过程中实现执行动态 SQL 语句有以下三种方法:
PREPARE
语句,将 SQL 语句存储在一个变量中;EXECUTE
语句,执行该变量中的SQL语句,可以动态拼接 SQL 语句。下面是一个示例,演示了如何动态拼接 SQL。
CREATE PROCEDURE my_proc(IN tableName VARCHAR(50))
BEGIN
DECLARE query VARCHAR(255);
SET query = CONCAT('SELECT * FROM ', tableName);
PREPARE dynamic_statement FROM query;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;
END;
下面是一个示例,演示了使用 SET 语句执行动态 SQL。
CREATE PROCEDURE my_proc(IN tableName VARCHAR(50))
BEGIN
SET @query = CONCAT('SELECT * FROM ', tableName);
PREPARE dynamic_statement FROM @query;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;
END;
下面是一个示例,演示了使用 IF 语句执行动态 SQL。
CREATE PROCEDURE my_proc(IN tableName VARCHAR(50))
BEGIN
IF tableName = 'table1' THEN
SET @query = 'SELECT * FROM table1';
ELSE
SET @query = 'SELECT * FROM table2';
END IF;
PREPARE dynamic_statement FROM @query;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;
END;
总结:以上的三种方法在存储过程中可以灵活地使用,但需要注意防止 SQL 注入攻击。如果动态构造了 SQL 语句,一定要谨慎对待外界传入的数据。
本文链接:http://task.lmcjl.com/news/18950.html