DB2如何处理在动态调用的模块中创建的临时表?

时间:2018-12-03 09:57:16

标签: sql db2 temp-tables cobol

我已经掌握了DB2的知识,而且似乎找不到我的问题的答案。

我正在编写一个用于处理授权的通用模块。它会从其他服务中动态调用,并返回一个临时表,其中包含用户有权读取的帐户以及一些其他信息。

现在我想知道主程序如何处理临时表? 我已经通过以下方式声明了临时表(实际上包含更多列):

EXEC SQL
   DECLARE GLOBAL TEMPORARY TABLE  SESSION.PEG_AUTH
   ( 
     Account_ID      CHAR(10)
   )
END-EXEC

主程序没有有关临时表声明的任何信息,所以如果在桌子上放一个索引? 考虑到主模块是在不了解动态调用模块的情况下进行编译的,因此个人看不到它是如何工作的。

还是主程序SQL也动态执行?

采用此解决方案的原因是,每个调用此模块的程序都需要访问数据库以及来自数据库的SELECT / FETCH信息。

非常感谢您阐明DB2如何处理此问题!

1 个答案:

答案 0 :(得分:0)

对于Db2-LUW,无论出现在哪里,对会话表(DGTT)的引用都是动态编译的。

您的主程序(在COBOL中)需要使用与创建DGTT的模块所使用的数据库连接相同的数据库连接,否则主程序将无法看到会话表。因此,您不能再使用连接池。

该模块可以在认为合适时对DGTT进行索引,而无需了解主程序。

您的问题显示的是单列DGTT,因此引发了一个问题,为什么除非主程序需要使用SQL查询会话表或可以使用其他列,否则简单的结果集就不够用了。