SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 14.05.2016 16:55:51

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

Ошибка курсора

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

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

create procedure PaymentsForMonthAndPeriod()
begin
declare contractid int;
declare percentage int;
declare sumcontract int;
declare countmonth int;
declare paymentsmonth int;
declare paymentsperiod int;
declare start date;
declare end1 date;
declare done int default 0;

declare DoCursor cursor for select insurance_contract.Sum_insured, object_insurance.Percentage, insurance_contract.Beginning, insurance_contract.Ending
from insurance_contract, object_insurance where insurance_contract.Object = object_insurance.id_object;

declare continue handler for not found set done = 1;
drop temporary table if exists temptable;
create temporary table temptable (id_list int auto_increment, IDcontract int, ForMonth int, ForPeriod int, primary key(id_list));
open DoCursor;

repeat
fetch DoCursor into contractid, sumcontract, percentage, start, end1;
if not done then
set contractid = contractid;
set countmonth = (select period_diff(date_format(start, '%Y%m'), date_format(end1, '%Y%m')));
set paymentsmonth = sumcontract/100*percentage;
set paymentsperiod = paymentsmonth*countmonth;
insert into temptable(IDcontract, ForMonth, ForPeriod) values (contractid, paymentsmonth, paymentsperiod);
end if;
until done end repeat;
close DoCursor;
select IDcontract, ForMonth, ForPeriod from temptable;
end


Но при вызове выдаёт ошибку:
Error Code: 1328. Incorrect number of FETCH variables
Думаю, может что-то с датами ему не нравится, помогите разобраться.

Отредактированно Ovenvan (14.05.2016 16:59:48)

Неактивен

 

#2 14.05.2016 17:06:25

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка курсора

declare DoCursor cursor for select insurance_contract.Sum_insured, object_insurance.Percentage, insurance_contract.Beginning, insurance_contract.Ending
from insurance_contract, object_insurance where insurance_contract.Object = object_insurance.id_object;  -- выбирается 4 поля


fetch DoCursor into contractid, sumcontract, percentage, start, end1; -- хотите 4 значения записать в 5 переменных

Неактивен

 

#3 14.05.2016 17:23:24

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

Re: Ошибка курсора

Ох уж моя невнимательность... ну ладно, опять ваш форум выручает, премного благодарен

Неактивен

 

Board footer

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