2012-02-21 65 views
0

我有一个输出返回多行的问题MySQL的存储过程的多个行返回

多个 user_roleID的返回。步骤如下:

CREATE PROCEDURE Sample(OUT userName VARCHAR(30)) 
BEGIN 
SELECT user_roleID INTO userName FROM users; 
END 

我想获得的数据列表当我打印的输出值(用户名)

call Sample1(@emp); 
select @emp; 

但是当我excecute这个命令我碰到下面的错误报告:

1172 - 结果由多行的

有人可以告诉我如何解决这个问题?

亲切的问候

+1

可能重复的[如何从MySQL中的存储过程中检索多行?](http://stackoverflow.com/questions/8307939/how-to-retreive-multiple-rows-from-stored-procedure-in- mysql) – 2012-02-21 14:15:15

回答

1

如果您正在寻找创建一个存储函数返回基于用户名的ID,例如,那么下面会工作

CREATE FUNCTION Sample(inUserName VARCHAR(255)) RETURNS INT(11) 
BEGIN 
    DECLARE returnValue INT; 
    SELECT user_roleID INTO returnValue FROM users WHERE userName = inUserName LIMIT 1; 
    RETURN returnValue; 
END 

这将使用SELECT Sample('SomeUserName') AS userID;

被称为
+0

谢谢第二个是我在找的地方。工作得很好:) – thanksalot 2012-02-22 08:34:52

+0

你永远不会使用'LIMIT 1'返回多行?所以你不得不像上面提到的那样使用'SELECT Sample('SomeUserName')AS userID;'但是为什么要用一个函数呢?如果我没有错,这可以通过'SELECT user_roleID FROM users where userName ='SomeUserName''来解决? – Ben 2014-01-13 06:16:51

+0

您可以指定从LIMIT返回更多行,但是OP只是试图使用函数获取用户名的角色ID,该函数仅能够返回单个值,因此上述方法适用于他们。我无法知道他们为什么选择这样做。 – 2014-01-13 09:34:04

0

您不能以这种方式存储多行。要返回多行,你必须定义一个游标或者直接不回它存储在本地,如果不处理数据:

CREATE FUNCTION Sample(inUserName VARCHAR(255)) RETURNS INT(11) 
BEGIN 
    RETURN SELECT user_roleID FROM users WHERE userName = inUserName; 
END 

为什么不使用SQL只是代替?