2012-02-21 2 views
0

У меня есть проблема, возвращающая несколько строк в одном выходеMySQL хранимых процедуры несколько строк возврат

есть множественного user_roleID вернулся. Процедура ниже:

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

я хотел бы получить список данных, когда я напечатаю значение выходного (Username)

call Sample1(@emp); 
select @emp; 

но когда я Выполнение выражения этой команды я получаю сообщает следующее сообщение об ошибке:

1172 - Результат состоял из более чем одной строки

Может кто-нибудь сказать мне, как решить эту проблему?

вид касается

+1

Возможный дубликат [Как восстановить несколько строк из хранимой процедуры в mysql?] (Http://stackoverflow.com/questions/8307939/how-to-retreive-multiple-rows-from-stored-procedure-in- mysql) –

ответ

1

Если вы хотите создать хранимую функцию, чтобы вернуть идентификатор, основанный на имени пользователя, например, то следующий будет работать

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

+0

Вы никогда не сможете вернуть более одной строки, используя 'LIMIT 1'? Поэтому вы должны были сделать так, как вы упомянули «SELECT Sample (« SomeUserName ») AS userID ;, но почему, чем использовать функцию? Если я не ошибаюсь, это можно решить с помощью 'SELECT user_roleID FROM users, где userName = 'SomeUserName''? – Ben

+0

Вы можете указать, чтобы возвращать больше строк из LIMIT, однако OP просто пыталась получить идентификатор roleID для имени пользователя, используя функцию, которая может только вернуть одно значение, и поэтому вышеописанное работало для них. Я не в состоянии понять, почему они решили сделать это таким образом. –

0

Вы не можете хранить более одной строки таким образом. Чтобы вернуть несколько строк, вы должны определить курсор или вернуть его непосредственно, а не хранить его на месте, если не манипулировать данными:

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

Почему не использовать только SQL вместо этого?

Смежные вопросы