Вернуться   Дизайнерский форум » ВЕБ-ПРОГРАММИРОВАНИЕ » ASP, Perl, PHP и MySQL

Хранимые функции MYSQL

Обсуждение темы Хранимые функции MYSQL в разделе ASP, Perl, PHP и MySQL, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; Создаю хранимую функцию в MYSQL по аналогу как написано здесь . Изменил только PROCEDURE на FUNCTION, т.к. вычитал что в PROCEDURE RETURN не ...


Закрытая тема
 
Опции темы
Старый 01.04.2010, 16:58   #1
Создаю хранимую функцию в MYSQL по аналогу как написано здесь.
Изменил только PROCEDURE на FUNCTION, т.к. вычитал что в PROCEDURE RETURN не ставится.

Пробовал так:

PHP код:
CREATE FUNCTION GET_PARENTS (id_catalog INTEGER)
RETURNS (E_ID INTEGERNAME CHAR(200))
AS
declare 
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_catalogC.cat_subordinationC.NAME
      FROM tbl_catalog C
      WHERE id_catalog 
= :id_catalog
      INTO 
:E_ID, :P_ID,:NAME;
      
id_catalog=P_ID;
      
SUSPEND;
    
END
END 
и так

PHP код:
DELIMITER $$

CREATE FUNCTION GET_PARENTS (id_catalog INTEGER)
RETURNS(E_ID INTEGERNAME CHAR(200)) AS 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_catalogC.cat_subordinationC.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 variable P_ID integer; BEGIN selec' at line 2.

Ругается на шаблон возвращаемых данных.

Если очистить тело функции и поменять RETURNS(E_ID INTEGER, NAME CHAR(200)) AS variable P_ID integer; на RETURNS ineger(50), то все отлично срабаотыват.

В чем может быть ошибка?
 
Старый 01.04.2010, 16:58
Ссылки
Старый 02.04.2010, 12:44   #2
В том, что функция обязана вернуть скаляр - то есть одно значение. Остальное можете возвращать через параметры функции...

Добавлено через 6 минут

Более того

Цитата:
12.4.3.2. CREATE FUNCTION Syntax
CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL}
SONAME shared_library_name
{STRING|INTEGER|REAL|DECIMAL} - выбор невелик...

Последний раз редактировалось Асмодиан; 02.04.2010 в 12:44.. Причина: Добавлено сообщение
 
Старый 02.04.2010, 14:05   #3
Цитата:
Сообщение от Асмодиан Посмотреть сообщение
В том, что функция обязана вернуть скаляр - то есть одно значение. Остальное можете возвращать через параметры функции...

Добавлено через 6 минут

Более того



{STRING|INTEGER|REAL|DECIMAL} - выбор невелик...
Я тоже это заметил, но получается что с 2006года, когда эта статья на RSDN была написана, MySQL изменился не влучшую сторону касамемо хранимых процедур.

Вы говорите про возврат значений в переданные параметры. Как это реализуемо? В MySQL же нет передачи значений по ссылке. Можно какую-нибудь ссылочку на пример плз.
 
Старый 02.04.2010, 14:25   #4
Anthony, ну юзайте же документацию )))
http://dev.mysql.com/doc/refman/5.1-...procedure.html

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;
 
Этот пользователь сказал спасибо Асмодиан за это полезное сообщение:
Anthony (02.04.2010)
Старый 02.04.2010, 15:33   #5
Асмодиан, Спасибо
Смотрел мануал да этого, а пример проглядел.

Возможно ли построить такую структру:

WHILE (SELECT val, name FROM t) DO{ //пока есть какие-нибудь записи...
ADD TO RETURN TABLE // добавляем найденные значения в таблицу.
}

Дело в том что я попытался построить такой цикл, делая временную таблицу (честно говоря хотелось бы этого избежать)

Делаю SELECT @a, в результате если больше одной записи, ругается на это.

Получается что таблицу целиком нельзя туда вернуть?

Последний раз редактировалось Anthony; 02.04.2010 в 15:33.. Причина: Добавлено сообщение
 
Старый 02.04.2010, 15:37   #6
Честно - мало что помню из функций и прочего. а особенно такие вещи. Посмотри ещё в сторону процедур - они вроде погибче...
и смотри примеры

Последний раз редактировалось Асмодиан; 02.04.2010 в 15:40..
 
Старый 02.04.2010, 15:37
Закрытая тема




Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Javascript. Браузер не показывает функции Ван HTML, CSS, JavaScript 2 13.04.2016 13:52
Как в php работают функции? Вертер ASP, Perl, PHP и MySQL 2 11.02.2010 20:42
HELP!!! Проблема с кодировкой PHP функции mail() oberon HTML, CSS, JavaScript 8 31.03.2007 15:07
Помогите, плз, в проблеме по Js функции kluger ASP, Perl, PHP и MySQL 3 12.09.2006 08:28
вызов php-функции handler ASP, Perl, PHP и MySQL 3 30.08.2006 13:12


Текущее время: 14:07. Часовой пояс GMT +4.

Реклама на форуме Условия размещения рекламы
Биржа ссылок Заработай на сайте!
Дизайнерский форум