2010-05-23 2 views
4

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

Например

 
DELIMITER // 

create function go() 

RETURNS int 
deterministic 
NO SQL 

BEGIN 

return null ; -- this doesn't return 0 rows! it returns 1 row 
-- return 0 ; 

END // 

DELIMITER ; 

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

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

ответ

7

Из ссылки MySQL:

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

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

+0

WoW! Это действительно интересно. – bobobobo

+0

Итак, это действительно отвечает на мой запрос. Это хорошее решение! – bobobobo

1

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

create function go() 
RETURNS @MyTable table 

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

Insert @MyTable 
Values (.....) 

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

+0

Это интересный подход. Интересно, насколько это дорого. – bobobobo

+0

Это также непроверено - я в настоящее время дважды проверяю свой подход. Я сделал это в других вариантах SQL. В какой версии MySQL вы работаете? – LesterDove

+0

Я использую MySQL 5.1 – bobobobo

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