powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка в хранимой процедуре
6 сообщений из 6, страница 1 из 1
Ошибка в хранимой процедуре
    #39868184
alexK19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста, что с моим курсором не так?

attempt to fetch past the last record in a record stream

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
SET TERM ^ ;

create or alter procedure PROC_WRITEBACK (
    SHIPID integer not null)
returns (
    ERRCONSID integer)
as
declare variable CONSID integer;
declare variable OFFCOUNT numeric(15,3);
declare variable ONEPRICE numeric(15,2);
declare variable TEMPPRICE numeric(15,2);
declare "curback" cursor for (
    select CONS_ID, OFF_COUNT, CONS_PRICE
    from SHIP_DETAIL
    where SHIP_ID = :SHIPID);
begin
  errconsid = -1;
  open "curback";
    while (1=1) do begin
      fetch "curback" into consid, offcount, oneprice;
      select cons_price from consumables where cons_id = :consid into :tempprice;
      if (oneprice <> tempprice) then begin
        /*если вдруг цена за ещиницу помянялась, а делаем возврат по старой цене,
        возвращаем ID расходного материала*/
        errconsid = :consid;
        leave;
      end
      else begin
        update consumables set cons_balance = (cons_balance + :offcount)  where cons_id = :consid;
      end

      if (row_count = 0) then leave;
    end
  close "curback";
  delete from shipped where ship_id = :shipid;
  suspend;
end
^

SET TERM ; ^
...
Рейтинг: 0 / 0
Ошибка в хранимой процедуре
    #39868189
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexK19,

тем что row_count надо проверять сразу после фетча из курсора, а не когда произошёл ещё один из другого курсора
...
Рейтинг: 0 / 0
Ошибка в хранимой процедуре
    #39868195
alexK19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисalexK19,

тем что row_count надо проверять сразу после фетча из курсора, а не когда произошёл ещё один из другого курсора

Спасибо, буду знать

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  open "curback";
    while (1=1) do begin
      fetch "curback" into consid, offcount, oneprice;
      if (row_count > 0) then begin
        select cons_price from consumables where cons_id = :consid into :tempprice;
        if (oneprice <> tempprice) then begin
          /*если вдруг цена за единицу помянялась, а делаем возврат по старой цене,
          возвращаем ID расходного материала*/
          errconsid = :consid;
          leave;
        end
        else begin
          update consumables set cons_balance = (cons_balance + :offcount)  where cons_id = :consid;
        end
      end
      else begin
        leave;
      end
    end
  close "curback";



Нагуглил пример неправильный )
...
Рейтинг: 0 / 0
Ошибка в хранимой процедуре
    #39868197
alexK19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leave это как break в Delphi для выхода из цикла, правильно?
syspend использовать ведь не уместно? весь код ниже выполнен не будет?
...
Рейтинг: 0 / 0
Ошибка в хранимой процедуре
    #39868497
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexK19leave это как break в Delphi для выхода из цикла, правильно?
Да
alexK19syspend использовать ведь не уместно? весь код ниже выполнен не будет?Лучше не надо делать suspend в процедурах, которые изменяют базу, ведь он будет ожидать фетча. Это плохая практика.
...
Рейтинг: 0 / 0
Ошибка в хранимой процедуре
    #39871244
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexK19Нагуглил пример неправильный )

https://www.gunsmoker.ru/2010/05/90.html
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка в хранимой процедуре
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]