Убил три дня на изучение простой вещи, надеюсь кому то поможет.
Использование Функций и Процедур в СУБД MySQL 5.0-5.1
Функция не может звозвращать значение типа TABLE или ROW и даже CURSOR, только вещественные значения такие как INT, FLOAT, CHAR и т.д. Поэтому функции лучше использовать как вспомогательные элементы к процедурам ИМХО.
"RETURN в процедуре" как оказалось существует два варианта:
Первый возвращение через параметры OUT и IN/OUT Выглядит это так:
CALL prname('INPARAM1', @a1) SELECT @a1;
На лицо недостатки метода нужно заранее знать количество необходимых параметров, что лично для меня не подходило
Второй вариант:
Вывод через процедуры такого вида:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `msgbox`(IN xid INT(11), IN xlang char(2))
BEGIN
select id, text, lang from messages where id=xid and lang=xlang limit 0, 1;
END$$
DELIMITER ;
То что надо можем вставлять любе запросы любые разветвления, алгоритмы и т.д.
Но, есть одно НО =)
А именно в моем SQLyog все работает на ура, но когда выполняю примерно так на PHP (apache/OS Win) $result = mysql_query($query, $this->db_id) ;
Возвращается ошибка
MySQL Error!
------------------------
The Error returned was:
PROCEDURE real.sel_komnat can't return a result set in the given context
Error Number:
1312
На официальном форуме, ни слова про это нет. На русском вообще тем по пальцам пересчитать можно, у буржуев советы только по выводу через параметры как в первом способе.
На самом деле все гораздо проще... Стоило только подключить библиотеку MySQLi как все заработало на ура. fetch Проходит без проблем.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий