MySQL функция возвращает более 1 строки - PullRequest
4 голосов
/ 23 мая 2010

Я хотел бы написать хранимую функцию MySQL, которая возвращает несколько строк данных. Это возможно? Кажется, он заблокирован в 1 строке - даже не может вернуть 0 строк.

Например

DELIMITER //

create function go()

RETURNS int
deterministic
NO SQL

BEGIN

return null ; -- <b>this doesn't return 0 rows!  it returns 1 row</b>
-- return 0 ;

END //

DELIMITER ;

Возвращая null из хранимого процесса MySQL, он не возвращает 0 строк .. он возвращает 1 строку со значением null в нем.

Могу ли я вернуть 0 или более 1 строки из функции MySQL, как?

Ответы [ 2 ]

7 голосов
/ 23 мая 2010

Из справочника MySQL:

23.4.6: Могут ли хранимые процедуры MySQL 5.0 возвращать наборы результатов?

Хранимые процедуры могут, а хранимые функции - нет.Если вы выполняете обычный SELECT внутри хранимой процедуры, результирующий набор возвращается непосредственно клиенту.Вам нужно использовать клиент-серверный протокол MySQL 4.1 (или выше), чтобы это работало.Это означает, что, например, в PHP вам нужно использовать расширение mysqli, а не старое расширение mysql.

1 голос
/ 23 мая 2010

Вы хотите создать функцию, которая возвращает таблицу:

create function go()
RETURNS @MyTable table 

затем заполните эту таблицу, однако ...

Insert @MyTable
Values (.....) 

и затем верните это. Он должен содержать 0, 1 или много строк, в зависимости от того, чем вы его заполнили. (Или не заполнил это ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...