使用动态查询将查询结果输出到存储过程中的变量
动态查询为数据库编程提供了灵活性。在 MySQL 中,可以在存储过程中生成动态查询并执行它们以获得结果。然而,出现了一个常见问题:如何将此类查询的输出捕获到存储过程中的 OUT 参数中?
考虑以下示例,其中构建动态查询来计算记录 (query1) 并检索数据 (query2) ):
CREATE PROCEDURE 'searchInvoice' ( OUT numOfRecords INT ) BEGIN DECLARE query1 TEXT; DECLARE query2 TEXT; SET query1 = 'SELECT COUNT(*) bla bla bla.....'; // Query1 to select the count of matching tuples.. SET query2 = 'SELECT * from bla bla bla....'; // Query2 to select original records... // later part of this both queries generate dynamically according to some IN parameters.. // now I wanna assign the output of the query1 into numOfRecords // and I wanna execute the query2 as well.. like this SET @Sql = query2; PREPARE STMT FROM @Sql; EXECUTE STMT; DEALLOCATE PREPARE STMT; // output of the query2 can be read in PHP END
要解决这个问题,我们可以使用如下所示的修改方法:
CREATE TABLE table1( column1 VARCHAR(255) DEFAULT NULL, column2 VARCHAR(255) DEFAULT NULL, column3 VARCHAR(255) DEFAULT NULL ); INSERT INTO table1 VALUES ('1', 'value1', 'value2'), ('2', 'value3', 'value4'); DELIMITER $$ CREATE PROCEDURE procedure1(IN Param1 VARCHAR(255), OUT Param2 VARCHAR(255), OUT Param3 VARCHAR(255)) BEGIN SET @c2 = ''; SET @c3 = ''; SET @query = 'SELECT column2, column3 INTO @c2, @c3 FROM table1 WHERE column1 = ?'; PREPARE stmt FROM @query; SET @c1 = Param1; EXECUTE stmt USING @c1; DEALLOCATE PREPARE stmt; SET Param2 = @c2; SET Param3 = @c3; END$$ DELIMITER ; -- Call procedure and use variables SET @Param1 = 2; SET @Param2 = ''; SET @Param3 = ''; CALL procedure1(@Param1, @Param2, @Param3); SELECT @Param2, @Param3;
此方法初始化变量(@c2 和 @c3)以保存动态查询的输出,并构造查询 (@query) 以使用数据库中的数据填充这些变量。然后准备查询,使用指定的参数执行,并将结果分配给 OUT 参数(Param2 和 Param3),然后退出过程。
以上是如何将动态查询的输出捕获到 MySQL 存储过程中的 OUT 参数中?的详细内容。更多信息请关注PHP中文网其他相关文章!