如何在MySQL中调用程序?

时间:2014-01-27 21:14:23

标签: mysql call procedure

我已经开始研究MySQL中的过程,但我的所有努力都不起作用。这是我的程序创建:

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

MySQL返回O.K.,没有错误。

 DELIMITER ;

MySQL返回O.K.,没有错误。

但是CALL-Statement不起作用:

CALL test(8);

返回错误:      #1312 - 过程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

如果你只需要一个两个或更多的结果instad,你也可以使用SET - Statement。我们在这里:

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

1 个答案:

答案 0 :(得分:0)

另见上述评论:

  

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