mysql存储过程中的动态sql

mysql存储过程中的动态sql,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我正在尝试编写一个通用的sql过程,它可以将任何字符串作为sql语句执行 以下是过程定义 DELIMITER // DROP PROCEDURE IF EXISTS execute_dynamic_sql; CREATE PROCEDURE execute_dynamic_sql (IN sql_query longtext) BEGIN SELECT sql_query; PREPARE stmt FROM @sql_query; EXECUTE stmt; DEALLOCATE PREPA

我正在尝试编写一个通用的sql过程,它可以将任何字符串作为sql语句执行

以下是过程定义

DELIMITER //

DROP PROCEDURE IF EXISTS execute_dynamic_sql;
CREATE PROCEDURE execute_dynamic_sql (IN sql_query longtext)
BEGIN
SELECT sql_query;
PREPARE stmt FROM @sql_query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
我这样调用上面的函数

mysql> call execute_dynamic_sql('show tables');
    -> //
+-------------+
| sql_query   |
+-------------+
| show tables |
+-------------+
1 row in set (0.00 sec)

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1
mysql> #

有人能告诉我为什么会出现错误吗?

重要的是要指出和例程参数之间的差异,它们是不同的变量

在您的示例中,
@sql\u query
NULL
sql\u query
被分配给
显示表

尝试:

分隔符//
创建过程“执行动态sql”(在“sql查询”长文本中)
开始
SET@`sql\u query`:=`sql\u query`;
从@sql\u查询中准备'stmt';
执行'stmt';
取消分配“stmt”;
结束//
定界符;

。。。为什么要编写一个过程来执行查询?为什么不直接执行查询呢?我必须做很多sql语句并执行它。因此,我将4条公共线移动到另一个程序。