【问题标题】:How will DB2 handle a temp table created in a dynamically called module?DB2 将如何处理在动态调用的模块中创建的临时表?
【发布时间】:2018-12-03 09:57:15
【问题描述】:

我的 DB2 知识已接近极限,但似乎无法找到问题的答案。

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

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

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

主程序没有关于临时表声明的任何信息,所以如果我例如把索引放在桌子上? 考虑到主模块是在不知道动态调用的模块的情况下编译的,个人看不出这是如何工作的。

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

这个解决方案的原因是每个调用这个模块的程序都需要访问一个数据库并从一个数据库中选择/获取信息。

任何帮助澄清 DB2 如何处理这个问题都非常感谢!

【问题讨论】:

    标签: sql db2 temp-tables cobol


    【解决方案1】:

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

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

    该模块可以在它认为合适的时候索引 DGTT,而无需主程序的知识。

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

    【讨论】:

    • 嗨,我已经测试了主程序可以访问表,以便清除该部分。该表确实包含多个列主要程序将从数据库中为临时表中的帐户选择/获取数据,因此我认为只需“移交”包含所需数据的表就更简单了。希望帮助澄清..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2023-03-22
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多