I don't use cursors myself, but are you sure "open cur_list_of_contracts;"
is enough to set a value different from 0 for row_count? Maybe you need to
do the first fetch earlier, e.g.

execute block as
  declare contractno CHAR(20);
  declare cur_list_of_contracts cursor for (select CU.CONTRACTNO
                                            from CLASSIC_UPGRADE CU
                                            join CONTRACT C on C.CONTRACTNO
= CU.CONTRACTNO
                                            where C.CONTRACTSTATUS = 'A'
                                              and CU.INSERTDATE >
'09/01/2016'
                                              and CU.INSERTDATE <
'09/10/2016'
                                              and (CU.STATUS in
('authorized', 'Authorized')
                                              and C.CONVERT2YRDATE IS NULL
);
begin
  open cur_list_of_contracts;
  fetch cur_list_of_contracts into contractno;
  while (ROW_COUNT > 0) do
  begin
    UPDATE CONTRACT C
    SET CONVERT2YRDATE = (SELECT CU.INSERTDATE From CLASSIC_UPGRADE CU
where CU.CONTRACTNO = :contractno)
    where C.CONTRACTNO = :contractno;
    if (ROW_COUNT = 0) then leave;
    fetch cur_list_of_contracts into contractno;
  end
  close cur_list_of_contracts;
end;

HTH,
Set

2017-02-17 10:04 GMT+01:00 Vishal Tiwari [email protected]
[firebird-support] <[email protected]>:

>
>
> Hi All,
>
> I have created the below cursor on Firbird DB (version 2.5). The update
> statement in below cursor is not updating value.
>
> *execute block*
> *as                                   *
> *declare contractno CHAR(20);*
> *declare cur_list_of_contracts cursor for (Select CU.CONTRACTNO From
> CLASSIC_UPGRADE CU, CONTRACT C where C.CONTRACTNO = CU.CONTRACTNO AND
> C.CONTRACTSTATUS = 'A' AND CU.INSERTDATE > '09/01/2016' AND CU.INSERTDATE <
> '09/10/2016' AND (CU.status = 'authorized' or CU.status = 'Authorized') AND
> C.CONVERT2YRDATE IS NULL  );*
>
> *begin*
> *open cur_list_of_contracts;*
> *  while (ROW_COUNT > 0) do*
> *  begin*
> *    fetch cur_list_of_contracts into contractno;*
> *    UPDATE CONTRACT C*
> *    SET CONVERT2YRDATE = (SELECT CU.INSERTDATE From CLASSIC_UPGRADE CU
> where CU.CONTRACTNO = :contractno)*
> *    where C.CONTRACTNO = :contractno;*
>
> *    if (ROW_COUNT = 0) then leave;*
> *    suspend;*
> *  end*
> *  close cur_list_of_contracts;*
> *end;*
>
>
> The block is getting executed without any errors.
>
> But, the output is not as expected. The records in the table are not
> getting updated.
>
>
> With Best Regards.
>
> Vishal
>
>
> 
>

Reply via email to