我必须将一些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
答案 0 :(得分:0)
根据该文档,直到(包括)11.5版的Db2-LUW都限制了RETURNS TABLE
函数中DGTT(声明全局临时表)的使用。
您不能将being atomic
与declare global temporary table
一起使用(即,复合SQL(内联)块中当前不支持该语句)。
如果您使用MODIFIES SQL DATA
,则它对表函数的Compound SQL(已编译)有限制,它对标量函数有效。
在这种情况下,使用SQL PL存储过程代替表函数可能会更好。
如果您使用流水线函数,还可以规避一些限制,而CGTT在某些情况下可以提供帮助。