Как вернуть таблицу из функции MySQL

CREATE FUNCTION myFunction(id INT) RETURNS TABLE  
BEGIN  
   RETURN SELECT * FROM board;  
END  

Этот запрос выдает следующую ошибку:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TABLE  

2 ответа

Решение

Согласно документации по пользовательским функциям в MySQL
вы можете только вернуть значения типа {STRING|INTEGER|REAL|DECIMAL}

CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL}
    SONAME shared_library_name

Если вы хотите прочитать select набор результатов вы должны определить procedure но нет function,

DELIMITER //

DROP PROCEDURE IF EXISTS myProcedure //

CREATE PROCEDURE 
  myProcedure( id INT )
BEGIN  
   SELECT * FROM board
     -- add where condition if required
    WHERE Col_name = id
   ;  
END 
//

DELIMITER ;

И вы можете вызвать процедуру как

call myProcedure( 6 )

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

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

справочная ссылка: документы mySql

Другие вопросы по тегам