【问题标题】:How to use temp Tables in a DB2 Function如何在 DB2 函数中使用临时表
【发布时间】:2019-09-18 11:56:10
【问题描述】:

我必须将一些 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

【问题讨论】:

  • 我们使用的是 db2 版本 11.1
  • 这是一个 Ubuntu 操作系统

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


【解决方案1】:

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

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

如果您使用MODIFIES SQL DATA,那么它对表函数的复合 SQL(已编译)有限制,它适用于标量函数。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2011-12-20
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多