SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.05.2016 10:48:38

Ovenvan
Завсегдатай
Зарегистрирован: 13.05.2016
Сообщений: 27

Ошибка при работе процедуры

Доброго времени суток, моё изучение SQL продолжается, и столкнулся с такой ошибкой.
Написал процедуру для поиска договоров за выбранный период времени:


create procedure Find_ContractOnDate(beginC date, endC date)
begin
declare find int;
set find = (select count(*) from insurance_contract where Beginning between beginC and endC group by Beginning);
if (find != 0) then select*from insurance_contract where Beginning between beginC and endC group by Beginning;
else signal sqlstate '45000' set message_text = 'Договоров за данный период не найдено';
end if;
end


Но при вызове
call Find_ContractOnDate('2000-01-01','2010-01-01')
выдаёт ошибку:
Error Code: 1242. Subquery returns more than 1 row.
Не понимаю, в чём дело, объясните новичку в чём проблема?

Неактивен

 

#2 14.05.2016 12:49:46

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Ошибка при работе процедуры

set find = (select count(*) from insurance_contract where Beginning between beginC and endC group by Beginning);


Здесь абсолютно лиший GROUP BY. В результате подзапрос дает несколько чисел, а не одно, как это требуется.

Строго говоря, группировка во втором запросе также сделана некорректно, но к ошибке не приводит.

Неактивен

 

#3 14.05.2016 14:47:54

Ovenvan
Завсегдатай
Зарегистрирован: 13.05.2016
Сообщений: 27

Re: Ошибка при работе процедуры

rgbeast написал:

set find = (select count(*) from insurance_contract where Beginning between beginC and endC group by Beginning);


Здесь абсолютно лиший GROUP BY. В результате подзапрос дает несколько чисел, а не одно, как это требуется.

Строго говоря, группировка во втором запросе также сделана некорректно, но к ошибке не приводит.

Благодарю за помощь, убрал лишний GROUP BY, теперь работает нормально.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson