За последние 24 часа нас посетили 16489 программистов и 1578 роботов. Сейчас ищут 950 программистов ...

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

Тема в разделе "MySQL", создана пользователем demoniqus, 17 май 2012.

  1. demoniqus

    demoniqus Активный пользователь

    С нами с:
    29 мар 2011
    Сообщения:
    34
    Симпатии:
    0
    Подскажите, пожалуйста, такой вопрос. Для примера я создаю функцию

    Код (Text):
    1. DELIMITER $$
    2. create function some_func(IN param1 varchar, IN param2 varchar)
    3. RETURNS int
    4. BEGIN
    5. SELECT @lines_count:= count(*) FROM some_table;
    6. RETURN lines_count;
    7. END $$;
    8. DELIMITER ;
    Данный запрос делаю через phpmyadmin. В ответ получаю Your SQL query has been executed successfully.
    Далее я пытаюсь вызвать данную функцию
    Код (Text):
    1. SELECT some_func('', '');
    на что получаю ответ #1305 - FUNCTION demius.some_func does not exist
    В чем проблема?

    И еще, если кто-то знает, как в phpmyadmin посмотреть список имеющихся функций?
     
  2. Goryn

    Goryn Активный пользователь

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Коде создания функции возможно присутствуют ошибки(зависит от версии MySql), у меня заработал следующий вариант:
    Код (Text):
    1. CREATE DEFINER=`root`@`localhost` FUNCTION `some_func`(param1 char, param2 char) RETURNS int(11)
    2. BEGIN
    3. SELECT  count(*) into @lines_count FROM some_table;
    4. RETURN @lines_count;
    5. END
    В information_schema:

    Код (Text):
    1. SELECT *
    2. FROM `ROUTINES`
     
  3. wds

    wds Активный пользователь

    С нами с:
    27 июл 2012
    Сообщения:
    16
    Симпатии:
    0
    1. Убираем in
    2. Указываем длину varchar
    3. Запрос не верный, либо так:
    Код (Text):
    1. @lines_count = (select count(*) FROM some_table);
    либо так
    Код (Text):
    1. SELECT count(*) into @lines_count FROM some_table;
    пример:
    Код (Text):
    1. create function some_func( param1 varchar(255), param2 varchar(255))
    2. RETURNS int
    3. BEGIN
    4. SELECT count(*) into @lines_count FROM some_table;
    5. RETURN @lines_count;
    6. END
    4. либо сразу так без переменной
    Код (Text):
    1. create function some_func()
    2. RETURNS int
    3. BEGIN
    4. RETURN (SELECT count(*) FROM some_table);
    5. END