问题描述
每个不插入表或变量的 SELECT 语句都会产生一个结果集。
如果您希望您的存储过程只返回一个结果集,请确保您只有一个 SELECT 语句。如果您有其他 SELECT 语句,请确保它们将结果插入到表或变量中。
这里是存储过程的例子。
此存储过程将返回一个结果集:
DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
DECLARE local_variable_name INT;
SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;
SELECT * FROM table_1;
END;;
DELIMITER ;
此存储过程将返回两个结果集:
DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
DECLARE local_variable_name INT;
SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;
SELECT * FROM table_1;
SELECT * FROM table_2;
END;;
DELIMITER ;
解决方法
我试图了解在 Web 应用程序中使用的存储过程。在我看来,无论 MySQL 存储过程中的最后一条语句是什么,似乎都被视为该过程的结果集。不幸的是,似乎在 MySQL 文档中有引用说一个过程可以返回多个结果集。这种行为是如何触发的?如何告诉 MySQL 服务器我明确希望只返回一个结果集?
(例如,我有一个执行 SELECT 和一些插入的查询。我不想告诉客户有关插入的信息,但我确实希望为客户提供 SELECT 的结果集......)