微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将包含变量名的查询字符串传递到mysql存储过程中

如何解决如何将包含变量名的查询字符串传递到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 举报,一经查实,本站将立刻删除。