powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Подскажите, в чем дело - ошибка в функции !!!
6 сообщений из 6, страница 1 из 1
Подскажите, в чем дело - ошибка в функции !!!
    #36513558
Профессор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Освоением DB2 занимаюсь недавно. Не понимаю в чем дело!
Синтаксис как буд-то правильный. Что не так !
Подскажите, кто знает.

Тело функции:

CREATE FUNCTION FITOG_TURNOVER (data1 date, data2 date, reg int, whoiscall int)
RETURNS INT
READS SQL DATA
LANGUAGE SQL
BEGIN ATOMIC

DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE var INT DEFAULT 0;
DECLARE KdB smallint DEFAULT 0;
DECLARE KdS smallint DEFAULT 0;

declare cur cursor WITH RETURN for select KodB, KodS from shop where active = 1 order by KodB, KodS

FOR FETCH ONLY;
open cur;

FETCH FROM cur INTO Kdb, Kds;
WHILE (SQLSTATE = '00000') DO
if whoiscall = 1 then
set var = var + FGET_SUMMA (KdB, KdS, data1, data2, reg);
else
set var = var + FGET_TURNOVER (KdB, KdS, data1, data2, reg);
end if;
FETCH FROM cur INTO Kdb, Kds;
END WHILE;

CLOSE cur;

RETURN VAR;
END#


Интерпретатор выдает ошибку:

SQL0104N Обнаружен неправильный элемент "declare cur cursor WITH RETURN for"
после текста "mallint DEFAULT 0; ". Список возможных правильных элементов:
"<space>". LINE NUMBER=12. SQLSTATE=42601

SQL0104N Обнаружен неправильный элемент "declare cur cursor WITH RETURN for" после текста "mallint DEFAULT 0;

". Список возможных правильных элементов: "<space> ".
...
Рейтинг: 0 / 0
Подскажите, в чем дело - ошибка в функции !!!
    #36513666
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Профессор,

Если версия db2 - 9.7, уберите ATOMIC.
Если нет, то нельзя курсоры в функциях использовать.

Да и в любом случае надо бы типа такого что-то:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE FUNCTION FITOG_TURNOVER (data1 date, data2 date, reg int, whoiscall int)
RETURNS INT
READS SQL DATA
LANGUAGE SQL
RETURN coalesce((
select sum(
case whoiscall
 when  1  then FGET_SUMMA (KodB, KodS, data1, data2, reg)
 else FGET_TURNOVER (KodB, KodS, data1, data2, reg)
end
)
from shop 
where active =  1 
),  0 )#
...
Рейтинг: 0 / 0
Подскажите, в чем дело - ошибка в функции !!!
    #36513712
Профессор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein,

Курсоры нельзя использовать? :((
А что тогда можно? В смысле существует какая-то универсальная конструкция, заменяющая курсор - в общем виде хотя бы.
...
Рейтинг: 0 / 0
Подскажите, в чем дело - ошибка в функции !!!
    #36513747
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПрофессорКурсоры нельзя использовать? :((
А что тогда можно? В смысле существует какая-то универсальная конструкция, заменяющая курсор - в общем виде хотя бы. FOR statement .
...
Рейтинг: 0 / 0
Подскажите, в чем дело - ошибка в функции !!!
    #36513821
Профессор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein,

Понял, спасибо - буду разбираться
...
Рейтинг: 0 / 0
Подскажите, в чем дело - ошибка в функции !!!
    #36514347
Lkhiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Профессор, со своей стороны замечу, что курсор неправильного типа.

"WITH RETURN" подразумевает возврат RS юзеру, что абсолютно противоречит понятию скалярной функции.

С уважением, Лёня Х.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Подскажите, в чем дело - ошибка в функции !!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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