MySQL 如何从存储过程中返回结果集?

问题描述

每个不插入表或变量的 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 的结果集......)