我正在尝试在 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
您的代码中有语法错误,更多详细信息如下。 除了语法错误,你的标题提到了临时表,但你的代码没有,所以你的问题很差。
永远不要写">...不起作用",而是编写您看到的确切 SQLCODE 和 SQLSTATE 和消息。
在请求有关 Db2 的帮助时,请始终在问题中写下运行 Db2 服务器的 Db2 版本和操作系统(Z/OS、i-Series、Linux/Unix/Windows(,因为答案可能取决于这些事实。不同操作系统的不同版本的 Db2 具有不同的功能和不同的语法。
如果要对结果集使用游标,请使用 SQL PL 存储过程,因为限制较少。
SQL 表函数适用于不需要为结果集声明游标的情况。
Db2-LUW 阻止您在使用 BEGIN ATOMIC 时在 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
@