powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Скалярная функция с вызовом java функции
4 сообщений из 4, страница 1 из 1
Скалярная функция с вызовом java функции
    #36847636
Rust()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При компиляции процедуры с кодом:
Код: plaintext
1.
2.
3.
4.
DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT T.ID_TASK
FROM DB2ADMIN.TASKS AS T 
WHERE  1  in table(DB2ADMIN.IS_FILTER(T.ID_TASK))     
выдается ошибка
Код: plaintext
1.
2.
SQL0390N  Функция "DB2ADMIN.IS_FILTER" разрешена до функции "IS_FILTER", 
которая недопустима в том контексте, где она используется.  LINE NUMBER= 19 .  SQLSTATE= 42887 
в чем проблема? Код вызываемой функции:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE FUNCTION DB2ADMIN.IS_FILTER(I_ID_TASK BIGINT)
    RETURNS TABLE (res INTEGER)
    SPECIFIC DB2ADMIN.IS_FILTER
    MODIFIES SQL DATA
F1: BEGIN ATOMIC
DECLARE O_RES INTEGER DEFAULT  0 ;
...
RETURN with t (res) as (values (O_RES))
        select res from t;
END 
И еще вопрос: в процедуре IS_FILTER вызывается java функция, поэтому компилятор потребовал вписать "MODIFIES SQL DATA" и, соответственно, результат должен быть не скалярным (в данном случае таблица). Можно ли создать скалярную функцию, в которой вызывается java функция?
...
Рейтинг: 0 / 0
Скалярная функция с вызовом java функции
    #36848000
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rust(),

Код: plaintext
1.
...
WHERE  1  in (select res from table(DB2ADMIN.IS_FILTER(T.ID_TASK)) a)
Rust()И еще вопрос: в процедуре IS_FILTER вызывается java функция, поэтому компилятор потребовал вписать "MODIFIES SQL DATA" и, соответственно, результат должен быть не скалярным (в данном случае таблица).Только из-за java-функции оно не может потребовать MODIFIES, т.к. внешние ф-ции не могут быть MODIFIES.
Rust()Можно ли создать скалярную функцию, в которой вызывается java функция?Можно.
...
Рейтинг: 0 / 0
Скалярная функция с вызовом java функции
    #36848304
Rust()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,
если убрать условие MODIFIES SQL DATA, то выдается ошибка что оно должно быть.
Ошибку удается исправить только при комментировании строки вызова java функции
Код: plaintext
1.
call db2admin.var_filter(I_ID_PROCESS, I_FILTER_ATTR, VAR_COUNTER);
где _ID_PROCESS, I_FILTER_ATTR - входные параметры, VAR_COUNTER - выходной.
...
Рейтинг: 0 / 0
Скалярная функция с вызовом java функции
    #36849415
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rust()если убрать условие MODIFIES SQL DATA, то выдается ошибка что оно должно быть.
Ошибку удается исправить только при комментировании строки вызова java функции
Код: plaintext
1.
call db2admin.var_filter(I_ID_PROCESS, I_FILTER_ATTR, VAR_COUNTER);
где _ID_PROCESS, I_FILTER_ATTR - входные параметры, VAR_COUNTER - выходной.Если вы делаете call, то это не функция, а процедура.
А функция и процедура - это не одно и то же.
Если процедура не делает изменений (update, delete, insert, merge), то обявляйте её явно READS SQL DATA, и тогда вас не заставят вызывающую ф-цию объявлять как MODIFIES SQL DATA.
Если делает, то скалярная ф-ция может быть MODIFIES SQL DATA только начиная с 9.7 и при выполнении некоторых доп. условий.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Скалярная функция с вызовом java функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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