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


16

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

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

Answers:


17

每个未插入表或变量中的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 ;

嗯,所以如果它进入表或变量中,结果就不会包含在内吗?如何访问;使用例如SELECT INTO?
Billy ONeal

是的,第一个问题。我对你的第二个问题不清楚。如果要从存储过程中将值保存到局部变量中,请运行以下命令:SELECT column_name LIMIT 1 INTO local_variable_name;
dabest1

上面的示例查询应该是:SELECT column_name FROM table LIMIT 1 INTO local_variable_name;
dabest1

如果我想从另一个存储过程调用获得后stored_procedure_name变量,我不能设置结果=呼叫stored_procedure_name();,如何解决它,如果我使用游标,声明c_dept CURSOR用于呼叫get_info_user_visitstatistics()语法错误?
阿弥陀佛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.