【问题标题】:How to CALL a PROCEDURE in MySQL?如何在 MySQL 中调用 PROCEDURE?
【发布时间】:2014-02-18 22:30:44
【问题描述】:

我已经开始检查 MySQL 中的过程,但我所有的努力都没有奏效。这是我的程序创建:

DELIMITER //
CREATE PROCEDURE test(IN a INT)
BEGIN
    SELECT * 
    FROM `table`
    WHERE `id` = a;
END

MySQL 返回正常,没有错误。

 DELIMITER ;

MySQL 返回正常,没有错误。

但是 CALL-Statement 不起作用:

CALL test(8);

返回错误: #1312 - PROCEDURE dbxyz.test 无法返回给定上下文中的结果集

现在,我不知道自己做错了什么:Procedure-Cration 中的错误或 CALL-Statement 中的错误。

--> ##########################

截至 2014 年 2 月 6 日: 今天,我试图找出为什么我的存储过程在 phpMyAdmin 的查询窗口中不起作用。 'SELECT *' 在存储过程中不起作用,但逐列的 SELECT 确实起作用。这是我发现的:使用 IN 和 OUT 以及 INTO。示例:

 DELIMITER //
 CREATE PROCEDURE test(IN a INT, OUT b VARCHAR(12), OUT c INT)
 BEGIN
   SELECT b, c
   FROM `table`
   WHERE `id` = a
   INTO b, c;
 END

现在,这个存储过程可以在phpMyAdmin中运行了:

 call test(5, @result1, @result2);
 SELECT @result1, @result2

如果你只需要一个结果而不是两个或更多,你也可以使用 SET - 语句。我们在这里:

   DELIMITER //
   CREATE PROCEDURE test(IN a INT, OUT b INT)
   BEGIN
        SET b = ( SELECT b
        FROM table
        WHERE id = a );
   END

【问题讨论】:

  • 可能是thisthis
  • 并非如此。我已经在 phpMyAdmin 的查询窗口中设置了这个查询。
  • 嗯,您的查询看起来是正确的。我怀疑这是一个偶尔出现的 phpMyAdmin 问题,每个 this answer。如果您的CALL 在 MySQL 客户端或工作台中工作,则它是 phpMyAdmin 错误。如果没有,我们有更多信息。
  • 今天,我试图找出为什么我的存储过程不起作用。 'SELECT *' 在存储过程中不起作用,但逐列的 SELECT 确实起作用。这是我发现的:DELIMITER // CREATE PROCEDURE test(IN a INT, OUT b VARCHAR(12), OUT c INT) BEGIN SELECT b, c FROM table WHERE id = a INTO b, c; END 现在我可以运行我的程序了: call test(5, @result1, @result2);选择@result1,@result2
  • 你需要的是一个存储函数而不是过程。两者的区别在于存储函数返回结果,而存储过程是没有返回结果的函数。您可以传递将填充数据的变量,就像您所做的那样,但要让它以您认为的原始方式工作 - 您需要创建一个函数。

标签: mysql call procedure


【解决方案1】:

另见上面的评论:

今天,我试图找出为什么我的存储过程不起作用。 'SELECT *' 在存储过程中不起作用,但 SELECT 逐列确实有效。这是我发现的:DELIMITER // 创建过程测试(IN a INT, OUT b VARCHAR(12), OUT c INT) BEGIN SELECT b, c FROM table WHERE id = a INTO b, c; END 现在我可以运行我的 程序:调用 test(5, @result1, @result2);选择@result1,@result2 – 彼得 2014 年 2 月 6 日在 11:09

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 2013-01-16
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2022-08-22
    相关资源
    最近更新 更多