我已经掌握了DB2的知识,而且似乎找不到我的问题的答案。
我正在编写一个用于处理授权的通用模块。它会从其他服务中动态调用,并返回一个临时表,其中包含用户有权读取的帐户以及一些其他信息。
现在我想知道主程序如何处理临时表? 我已经通过以下方式声明了临时表(实际上包含更多列):
EXEC SQL
DECLARE GLOBAL TEMPORARY TABLE SESSION.PEG_AUTH
(
Account_ID CHAR(10)
)
END-EXEC
主程序没有有关临时表声明的任何信息,所以如果在桌子上放一个索引? 考虑到主模块是在不了解动态调用模块的情况下进行编译的,因此个人看不到它是如何工作的。
还是主程序SQL也动态执行?
采用此解决方案的原因是,每个调用此模块的程序都需要访问数据库以及来自数据库的SELECT / FETCH信息。
非常感谢您阐明DB2如何处理此问题!
答案 0 :(得分:0)
对于Db2-LUW,无论出现在哪里,对会话表(DGTT)的引用都是动态编译的。
您的主程序(在COBOL中)需要使用与创建DGTT的模块所使用的数据库连接相同的数据库连接,否则主程序将无法看到会话表。因此,您不能再使用连接池。
该模块可以在认为合适时对DGTT进行索引,而无需了解主程序。
您的问题显示的是单列DGTT,因此引发了一个问题,为什么除非主程序需要使用SQL查询会话表或可以使用其他列,否则简单的结果集就不够用了。