Создание хранимой функции MySQL
От: Antrekot  
Дата: 01.04.10 07:37
Оценка:
Создаю хранимую функцию в MYSQL по аналогу как написано здесь
Автор(ы): Михаил Голованов
Дата: 28.01.2002
.
Изменил только PROCEDURE на FUNCTION, т.к. вычитал что в PROCEDURE RETURN не ставится.

Пробовал так:
CREATE FUNCTION GET_PARENTS (id_catalog INTEGER)
RETURNS (E_ID INTEGER, NAME CHAR(200))
AS
declare variable P_ID integer;
BEGIN
  select cat_subordination from tbl_catalog where id_catalog = :id_catalog into :id_catalog;
  WHILE (id_catalog > 0) DO
    BEGIN
      SELECT C.id_catalog, C.cat_subordination, C.NAME
      FROM tbl_catalog C
      WHERE id_catalog = :id_catalog
      INTO :E_ID, :P_ID,:NAME;
      id_catalog=P_ID;
      SUSPEND;
    END
END

и так

DELIMITER $$

CREATE FUNCTION GET_PARENTS (id_catalog INTEGER)
RETURNS(E_ID INTEGER, NAME CHAR(200)) AS declare variable P_ID integer;
BEGIN
  select cat_subordination from tbl_catalog where id_catalog = :id_catalog into :id_catalog;
  WHILE (id_catalog > 0) DO
    BEGIN
      SELECT C.id_catalog, C.cat_subordination, C.NAME
      FROM tbl_catalog C
      WHERE id_catalog = :id_catalog
      INTO :E_ID, :P_ID,:NAME;
      id_catalog=P_ID;
      SUSPEND;
    END
END $$
DELIMITER ;


Всегда ругается:
Script line: 3    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 '(E_ID INTEGER, NAME CHAR(200)) AS declare variable P_ID integer; BEGIN selec' at line 2

И подозреваю что ругается на оператор RETURN или то что он возвращает.

В чем может быть ошибка?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.