powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как присвоить значение в теле FUNCTION?
11 сообщений из 11, страница 1 из 1
Как присвоить значение в теле FUNCTION?
    #35905215
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!

Как в теле function объявленной переменной присвоить значение из выборки? Код, работающий в procedure, не работает в function:

Код: plaintext
1.
2.
3.
4.
5.
6.
...
begin
declare maxid int default  0 ;
...
select max(RECID) into maxid from TEST.MYTAB;
...
end
При создании функции DB2 ругается с ошибкой
Код: plaintext
1.
2.
SQL0104N  Обнаружен неправильный элемент "maxid" после текста "max(RECID) into".
Список правильных элементов: "<space>".  LINE NUMBER=27.  
SQLSTATE=42601

С уважением, Семен Попов
...
Рейтинг: 0 / 0
Как присвоить значение в теле FUNCTION?
    #35905392
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

SELECT INTO нельзя в функции.
SQL statements that can be executed in routines .
В функции можно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
begin atomic
declare maxid int default  0 ;
...
for v as 
  select max(RECID) maxid from TEST.MYTAB
do
  set maxid = v.maxid;
end for;
...
end@
...
Рейтинг: 0 / 0
Как присвоить значение в теле FUNCTION?
    #35905985
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Mark. Как всегда, дали точный и исчерпывающий ответ. У меня ещё маленькая проблемка.
Никак не могу вызвать мою функцию, которая returns row (fld1 int, fld2 int).
Код: plaintext
select TEST.MYFUN() from SYSIBM.SYSDUMMY1
ругается. Видел ещё такой вызов
Код: plaintext
values TEST.MYFUN()
, но тоже не проходит. Пробовал ещё через call с различными вариантами - результата не добился.
...
Рейтинг: 0 / 0
Как присвоить значение в теле FUNCTION?
    #35906364
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovНикак не могу вызвать мою функцию, которая returns row (fld1 int, fld2 int).Нарыл всё-таки.

Для функции, которая returns table(fld1 int, fld2 int)
Код: plaintext
select t.* from table(MYFUN()) as t

Для функции, которая returns row (fld1 int, fld2 int)
Код: plaintext
select t.* from table(values(MYFUN())) as t(v1,v2)

Кстати из той ссылки, которую вы давали, вычитал, что select-statement не поддерживаются для function. Тогда почему работает
Код: plaintext
1.
2.
3.
4.
for v as 
  select max(RECID) maxid from TEST.MYTAB
do
  set maxid = v.maxid;
end for;
?
...
Рейтинг: 0 / 0
Как присвоить значение в теле FUNCTION?
    #35906428
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Semen PopovКстати из той ссылки, которую вы давали, вычитал, что select-statement не поддерживаются для function. Тогда почему работает
Код: plaintext
1.
2.
3.
4.
for v as 
  select max(RECID) maxid from TEST.MYTAB
do
  set maxid = v.maxid;
end for;
?select-statement как sql statement сам по себе - не поддерживается, а внутри sql statement FOR (или RETURN, например) - да.
...
Рейтинг: 0 / 0
Как присвоить значение в теле FUNCTION?
    #35913529
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

А где можно прочитать, где, какие операторы можно, а где нельзя????????

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE ppp INTEGER DEFAULT  0 ;

IF (param> 10 ) THEN SET ppp =  0 ;
IF (param> 20 ) THEN SET ppp =  1 ;
.............................................

DECLARE cur CURSOR FOR
     select t.* from t1 t where t.fff=ppp;
.............................................

автор[IBM][CLI Driver][DB2/NT] SQL0104N Обнаружен неправильный элемент "<cursor declaration>" после текста "". Список правильных элементов: "<SQL statement>". LINE NUMBER= . SQLSTATE=42601

Ругается на DECLARE ...... CURSOR. Как тут быть??
...
Рейтинг: 0 / 0
Как присвоить значение в теле FUNCTION?
    #35913609
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НиколахаА где можно прочитать, где, какие операторы можно, а где нельзя????????Укажите версию DB2. Для 9.5 ссылка давалась выше.
НиколахаРугается на DECLARE ...... CURSOR. Как тут быть??Лучше дайте весь SQL-код процедуры. Думаю, ответ сразу найдётся.
...
Рейтинг: 0 / 0
Как присвоить значение в теле FUNCTION?
    #35913624
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НиколахаMark Barinstein,

А где можно прочитать, где, какие операторы можно, а где нельзя????????

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE ppp INTEGER DEFAULT  0 ;

IF (param> 10 ) THEN SET ppp =  0 ;
IF (param> 20 ) THEN SET ppp =  1 ;
.............................................

DECLARE cur CURSOR FOR
     select t.* from t1 t where t.fff=ppp;
.............................................

автор[IBM][CLI Driver][DB2/NT] SQL0104N Обнаружен неправильный элемент "<cursor declaration>" после текста "". Список правильных элементов: "<SQL statement>". LINE NUMBER= . SQLSTATE=42601

Ругается на DECLARE ...... CURSOR. Как тут быть??В Compound SQL (Dynamic) statement , который можно в функции, нельзя DECLARE CURSOR.
...
Рейтинг: 0 / 0
Как присвоить значение в теле FUNCTION?
    #35914015
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Спасибо за линк!!!
...
Рейтинг: 0 / 0
Как присвоить значение в теле FUNCTION?
    #35917476
demidovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Я правильно понял, что в SQL скалярной функции в DB2 для z/OS невозможно вернуть значение с помощью SELECT запроса?

Хочется написать что-то типа

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE FUNCTION func1 ( PARAM INTEGER )
	RETURNS INTEGER
	RETURN SELECT VAL FROM A.MYTABLE
		WHERE PAR = PARAM
		ORDER BY BLABLABLA DESC
		FETCH FIRST ROW ONLY
...
Рейтинг: 0 / 0
Как присвоить значение в теле FUNCTION?
    #35917608
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
demidovichMark Barinstein,

Я правильно понял, что в SQL скалярной функции в DB2 для z/OS невозможно вернуть значение с помощью SELECT запроса?

Хочется написать что-то типа

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE FUNCTION func1 ( PARAM INTEGER )
	RETURNS INTEGER
	RETURN SELECT VAL FROM A.MYTABLE
		WHERE PAR = PARAM
		ORDER BY BLABLABLA DESC
		FETCH FIRST ROW ONLY
Не получится.
см. Return statement .
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как присвоить значение в теле FUNCTION?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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