За последние 24 часа нас посетили 17592 программиста и 1580 роботов. Сейчас ищут 1378 программистов ...

Хранимая функция возвращает ошибку

Тема в разделе "MySQL", создана пользователем Ann, 7 май 2007.

  1. Ann

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

    С нами с:
    17 апр 2007
    Сообщения:
    12
    Симпатии:
    0
    Пишу на mysql 5 Хранимую функцию
    Проверка если такая запись в таблице
    Есть вернуть ее айди..
    если нет то я так поимаю вернет ноль.
    Но выдается ошибка если задаю запись которой нет в базе то пишет
    Result consisted of more than one row

    если задаю запись имеющуюся в базе то пишет
    date too long for column 'tex7' at row 1
    DELIMITER $$

    DROP FUNCTION IF EXISTS `news`.`rows_autor`$$
    CREATE DEFINER=`root`@`localhost` FUNCTION `rows_autor`(tex7 varchar(200)) RETURNS int(11)
    BEGIN
    DECLARE rows_a INT;
    SELECT autor.id INTO rows_a FROM autor WHERE name_autor='tex7';
    RETURN rows_a;
    END$$

    DELIMITER ;

    подскажите что делать
     
  2. Goryn

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

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    В Oracle есть такая весчь как обработка исключительных ситуаций
    EXCEPTION, возможно такое есть и в MySql.

    Так же может возникнуть ошибка если запрос вернет больше чем одну запись.
     
  3. Goryn

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

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Если метода подобного EXCEption нет тогда сперва подсчитываем количество удовлетворяющих условию записей
    [sql]Select count(autor.id ) INTO rows_a FROM autor WHERE name_autor='tex7';
    If rows_a=0
    Return rows_a;
    Else
    SELECT autor.id INTO rows_a FROM autor WHERE name_autor='tex7';
    --Вот здесь может возникнуть ошибка если запрос вернет больше чем одну запись...
    RETURN rows_a;
    end;[/sql]
     
  4. Davil

    Davil Guest

    Блин, ну вот для чего на форуме добавлены кнопки php, sql, js, css, html кода? И даже просто кнопка "Code" есть на крайний случай...
     
  5. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    а limit=1 не поможет в крайнем случае?
     
  6. Goryn

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

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Он конечно поможет, но если нужен другой id из возвращенного результата?
    В итоге мне не совсем понятно предназначение данной функции если только поле name_autor не является уникальным.