如何在DB2函数中使用临时表

时间:2019-09-18 11:56:10

标签: stored-procedures db2 user-defined-functions

我必须将一些MsSQL过程和函数写入DB2过程和函数。 现在的问题是,我无法在具有begin atomic的函数中使用临时表。

在DB2函数中还有其他使用临时表的方法吗?

CREATE OR REPLACE FUNCTION abc( )
RETURNS TABLE (test INTEGER) 
LANGUAGE SQL
MODIFIES SQL DATA
NO EXTERNAL ACTION
NOT DETERMINISTIC
BEGIN atomic
DECLARE GLOBAL TEMPORARY TABLE  SESSION.StringParts (indexNumber  int, stringPart   nvarchar(4000)) ON COMMIT DELETE ROWS NOT LOGGED WITH REPLACE;
END

1 个答案:

答案 0 :(得分:0)

根据该文档,直到(包括)11.5版的Db2-LUW都限制了RETURNS TABLE函数中DGTT(声明全局临时表)的使用。

您不能将being atomicdeclare global temporary table一起使用(即,复合SQL(内联)块中当前不支持该语句)。

如果您使用MODIFIES SQL DATA,则它对表函数的Compound SQL(已编译)有限制,它对标量函数有效。

在这种情况下,使用SQL PL存储过程代替表函数可能会更好。

如果您使用流水线函数,还可以规避一些限制,而CGTT在某些情况下可以提供帮助。