我已经开始研究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
答案 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