mysql存储过程中的动态sql
我正在尝试编写一个通用的sql过程,它可以将任何字符串作为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
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条公共线移动到另一个程序。