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

Bil*_*eal 16 mysql stored-procedures

我正在尝试了解在 Web 应用程序中使用的存储过程。在我看来,MySQL 存储过程中的最后一条语句似乎被视为该过程的结果集。不幸的是,MySQL 文档中似乎有一些引用说一个过程可以返回多个结果集。这种行为是如何触发的?如何告诉 MySQL 服务器我明确希望只返回一个结果集?

(例如,我有一个执行 SELECT 和一些插入的查询。我不想告诉客户有关插入的信息,但我确实希望为客户提供 SELECT 的结果集......)

dab*_*st1 18

每个不插入表或变量的 SELECT 语句都会产生一个结果集。

如果您希望您的存储过程只返回一个结果集,请确保您只有一个 SELECT 语句。如果您有其他 SELECT 语句,请确保它们将结果插入到表或变量中。

UPDATE
以下是存储过程的示例。

此存储过程将返回一个结果集:

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 ;
Run Code Online (Sandbox Code Playgroud)

此存储过程将返回两个结果集:

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 ;
Run Code Online (Sandbox Code Playgroud)