2015-09-09 3 views
3

Я новичок в хранимой процедуре. Я написал запрос, чтобы получить несколько строк. Но я получаю ошибку, какКак вернуть несколько строк с помощью хранимой процедуры

Код ошибки: 1172. Результат состоял из нескольких строк.

Должен ли я использовать тип CURSOR?

Здесь мой запрос и структура таблицы.

Моя структура таблицы:

+---+------+------+---------+ 
|id | name | class| section | 
+---+------+------+---------+ 
|1 |abc |5  | A  | 
|2 |cdef |5  | B  | 
|3 |hikl |5  | A  | 
|4 |xyz |5  | A  | 
+---+------+------+---------+ 

Моя Хранимая процедура запроса

CREATE DEFINER=`root`@`localhost` PROCEDURE `mulitiOut`(out namee VARCHAR(50)) 
BEGIN 
select name into @namee from mytable where section = A; 
END 

Как я могу вернуть все названия, связанные с разделом А.

+2

Вы не можете хранить несколько записей в одной переменной. Просто выберите, не помещая ничего в переменную –

+0

@juergend: как использовать полученные данные. Я хотел сделать некоторые вычисления по данным. – wizneel

ответ

4

Вы можете вернуть результирующий набор непосредственно из процедуры:

CREATE DEFINER=`root`@`localhost` PROCEDURE `mulitiOut`() 
BEGIN 
SELECT name FROM mytable WHERE section = A; 
END 
1

Попробуйте GROUP_CONCAT функцию -

SELECT GROUP_CONCAT(name) INTO @namee FROM mytable WHERE section = A; 

В качестве обходного пути - создать и заполнить еще одну таблицу -

INSERT INTO temp_table(name) SELECT name FROM mytable WHERE section = A; 
+0

В приведенном выше запросе namee VARCHAR (50) в порядке или я должен делать какие-либо изменения? – inba

+0

Конечно, вы должны увеличить эту длину, если это необходимо. Кстати, функция GROUP_CONCAT также ограничена, 1024 - по умолчанию. – Devart

+0

Да, но я получаю все результаты в одном столбце. Но мне нужно в строке мудро! – inba

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