如何解决如何将包含变量名的查询字符串传递到mysql存储过程中
我有此过程需要传递可变参数。问题是:一旦进入过程,IN
参数就需要拾取已经创建的变量才能创建最终查询。
DELIMITER $$
DROP PROCEDURE IF EXISTS MY_PROCEDURE $$
CREATE PROCEDURE MY_PROCEDURE (
IN sql_string TEXT
)
BEGIN
SET @q1 := "SELECT * FROM table1";
SET @q2 := "SELECT * FROM table2";
-- capturing the string of the query from input
SET @sql = sql_string;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
-- calling the procedure
call MY_PROCEDURE('CONCAT(@q1," WHERE id1 < 10")');
call MY_PROCEDURE('CONCAT(@q1," WHERE id1 < 10"," UNION ",@q2," WHERE id2 < 10")');
无论我尝试了什么,为@
字符串提供IN
变量都会导致语法错误。
我认为拥有2组PREPARE
可能会达到目的:
首先,PREPARE通过扩展变量将IN
字符串转换为实际查询,仅返回字符串(这是否有可能??);
然后,第二个PREPARE在扩展的字符串上运行查询。
Ph!有帮助吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。