用户定义函数的临时表

时间:2018-06-06 06:29:25

标签: db2 user-defined-functions ibm-data-studio

我正在尝试在DB2的用户定义函数中使用临时表。我试图在数据工作室中这样做,但下面的代码不起作用。我怎样才能做到这一点?

感谢。

CREATE FUNCTION BELSIZE.TEST (aSTRING VARCHAR(50))
RETURNS TABLE(
column1 INTEGER
 )

F1: BEGIN ATOMIC

DECLARE c1 CURSOR WITH RETURN TO CLIENT FOR stmt;

SET v_dynStmt = 'SELECT 1 column1 from sysibm.sysdummy1';

PREPARE stmt FROM v_dynStmt;
OPEN c1;

RETURN
END

1 个答案:

答案 0 :(得分:1)

您的代码中存在语法错误,详情如下。 除了语法错误之外,你的标题提到了临时表,但你的代码却没有,所以你的问题很糟糕。

永远不要写" ...不工作"而是写下你看到的确切的SQLCODE和SQLSTATE以及消息。

在向Db2寻求帮助时,请务必在Db2-version 的问题上写下Db2上的操作系统(Z / OS,i-Series,Linux / Unix / Windows) -server运行,因为答案可能取决于这些事实。不同版本的Db2适用于不同的操作系统,具有不同的功能和不同的语法。

如果要将游标用于结果集,请使用SQL PL存储过程,因为限制较少。

当您不需要为结果集声明游标时,SQL表函数是合适的。

当您使用BEGIN ATOMIC时,Db2-LUW会阻止您在SQL表函数中声明游标。

如果你没有使用BEGIN ATOMIC,Db2-LUW(当前版本,即v11.1)允许你在SQL UDF中声明一个游标但你不能直接使用那个游标来返回结果集,就像你可以做的那样在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
@