В вашем коде есть синтаксические ошибки, подробности ниже.Помимо синтаксических ошибок, ваш заголовок упоминает временную таблицу, а ваш код - нет, поэтому ваш вопрос плохой.
Никогда не пишите " ... не работает ", вместо этого напишите точный SQLCODEи SQLSTATE и сообщение, которое вы видите.
При обращении за помощью с Db2 всегда пишите в вопросе версию Db2 и операционную систему (Z / OS, i-Series,Linux / Unix / Windows), на котором работает Db2-сервер, потому что ответ может зависеть от этих фактов.Разные версии Db2 для разных операционных систем имеют разные возможности и разный синтаксис.
Если вы хотите использовать курсоры для наборов результатов, то используйте хранимые процедуры SQL PL, поскольку ограничений меньше.
Табличные функции SQL подходят, когда вам не нужно объявлять курсор для набора результатов.
Db2-LUW не позволяет объявлять курсор в табличной функции SQL при использовании BEGIN ATOMIC.
Если вы не используете BEGIN ATOMIC, Db2-LUW (текущие версии, т.е. v11.1) позволяет вам объявить курсор в UDF SQL, но вы не можете напрямую использовать этот курсор для возврата набора результатов, как вы можете сделатьвнутри хранимых процедур SQL PL.
Для вашего примера приведенный ниже синтаксис действителен и также бесполезен, поэтому рассмотрите возможность использования вместо этого процедуры SQL PL:
--#SET TERMINATOR @
CREATE or replace FUNCTION BELSIZE.TEST (aSTRING VARCHAR(50))
RETURNS TABLE( column1 INTEGER)
language sql
specific belsize.test
BEGIN atomic
RETURN select 1 as column1 from sysibm.sysdummy1 ;
END
@
select * from table(belsize.test('a')) as t
@