powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / глюк с курсором
7 сообщений из 7, страница 1 из 1
глюк с курсором
    #39656239
someonesomeone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, что не так.
Есть процедура примерно следующего вида:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
alter procedure SET_DISCOUNT
as
DECLARE AMOUNT_DISCOUNT DOUBLE PRECISION;
begin
...
    for select
      DD.ID, coalesce((select sum(AMOUNT_DISCOUNT)
        from GTT_DOC_DETAILS where ID_DETAIL = DD.ID ), 0) AMOUNT_DISCOUNT
    from DOC_DETAILS DD
    into
      :DISCOUNT_AMOUNT
    as cursor DD
    do
    begin
      update DOC_DETAILS
      set AMOUNT_DISCOUNT = DD.AMOUNT_DISCOUNT
      --set AMOUNT_DISCOUNT = :AMOUNT_DISCOUNT
      where current of DD;
    end
end



выдает результат нулями если присваиваю через DD.AMOUNT_DISCOUNT
если через переменную :AMOUNT_DISCOUNT, то все работает как надо
в чем ошибка первого варианта?
...
Рейтинг: 0 / 0
глюк с курсором
    #39656243
someonesomeone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Firebird 3.0.3, диалект 1, Windows
...
Рейтинг: 0 / 0
глюк с курсором
    #39656251
someonesomeone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так правильнее:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
alter procedure SET_DISCOUNT
as
DECLARE AMOUNT_DISCOUNT DOUBLE PRECISION;
begin
...
    for select
      coalesce((select sum(AMOUNT_DISCOUNT)
        from GTT_DOC_DETAILS where ID_DETAIL = DD.ID ), 0) AMOUNT_DISCOUNT
    from DOC_DETAILS DD
    into
      :DISCOUNT_AMOUNT
    as cursor DD
    do
    begin
      update DOC_DETAILS
      set AMOUNT_DISCOUNT = DD.AMOUNT_DISCOUNT
      --set AMOUNT_DISCOUNT = :AMOUNT_DISCOUNT
      where current of DD;
    end
end
...
Рейтинг: 0 / 0
глюк с курсором
    #39656265
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
someonesomeone,

для начала сделай имя курсора отличным от алиаса таблицы.
Ну и в твоём случае я бы посмотрел в сторону merge вместо курсора
...
Рейтинг: 0 / 0
глюк с курсором
    #39656283
someonesomeone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал поменять алиас таблицы, выдает:
Код: sql
1.
2.
invalid request BLR at offset 2767.
context already in use (BLR error).
...
Рейтинг: 0 / 0
глюк с курсором
    #39656316
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
someonesomeone,

не знаю что вы там меняли, я предлагал сделать вот так.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
alter procedure SET_DISCOUNT
as
DECLARE AMOUNT_DISCOUNT DOUBLE PRECISION;
begin
...
    for select
      DD.ID, coalesce((select sum(AMOUNT_DISCOUNT)
        from GTT_DOC_DETAILS where ID_DETAIL = DD.ID ), 0) AMOUNT_DISCOUNT
    from DOC_DETAILS DD
    --into
    --  :DISCOUNT_AMOUNT
    as cursor C
    do
    begin
      update DOC_DETAILS
      set AMOUNT_DISCOUNT = C.AMOUNT_DISCOUNT
      --set AMOUNT_DISCOUNT = :AMOUNT_DISCOUNT
      where current of C;
    end
end



Ну или вообще заменить всю эту конструкцию на MERGE
...
Рейтинг: 0 / 0
глюк с курсором
    #39656351
someonesomeone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сработало, спасибо.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / глюк с курсором
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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