我已经开始检查 MySQL 中的过程,但我所有的努力都不起作用。这是我的程序创建:
DELIMITER //
CREATE PROCEDURE test(IN a INT)
BEGIN
SELECT *
FROM `table`
WHERE `id` = a;
END
MySQL 返回 OK,没有错误。
DELIMITER ;
MySQL 返回 OK,没有错误。
但 CALL 语句不起作用:
CALL test(8);
返回错误:
#1312 - PROCEDURE dbxyz.test 无法在给定上下文中返回结果集
现在,我不知道我犯了什么错:过程创建中的错误或调用语句中的错误。
--> ##########################
截至 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