Db2 用户定义函数的临时表

Db2 用户定义函数的临时表,db2,user-defined-functions,ibm-data-studio,Db2,User Defined Functions,Ibm Data Studio,我试图在DB2的用户定义函数中使用临时表。我正试图在DataStudio中执行此操作,但下面的代码不起作用。我怎样才能做到这一点 谢谢 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 c

我试图在DB2的用户定义函数中使用临时表。我正试图在DataStudio中执行此操作,但下面的代码不起作用。我怎样才能做到这一点

谢谢

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

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

永远不要写“…不工作”,而是写您看到的确切的SQLCODE和SQLSTATE以及消息

在请求Db2方面的帮助时,请始终在问题中填写Db2版本和运行Db2服务器的操作系统(Z/OS、i-Series、Linux/Unix/Windows),因为答案可能取决于这些事实。针对不同操作系统的不同版本的Db2具有不同的功能和不同的语法

如果要对结果集使用游标,则使用SQL PL存储过程,因为限制较少

SQL表函数适用于不需要为结果集声明游标的情况

DB2LUW防止您在使用BEGIN原子时在SQL表函数中声明游标

如果不使用BEGIN ATOMIC,DB2LUW(当前版本,即v11.1)允许您在SQLUDF中声明一个游标,但不能像在SQLPL存储过程中那样直接使用该游标返回结果集

对于你的例子,下面的语法是有效的,也是无用的,所以考虑使用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
@

大多数IBM文档都是无用的。这就是我们来这里的原因。从游标返回静态结果。。没有原子…声明x1整数;从csr获取next到x1;更新我的文件集p=p+1,其中当前为csr;关闭企业社会责任;从myfile返回select*,其中x=x1;结束;