您可以使用DECLARE GLOBAL TEMPORARY TABLE语句在DB2中创建会话临时表。有没有办法列出会话的SESSION模式中当前存在的所有表?注意 declared 全局临时表在SYSIBM.SYSTABLES中不存在。
DECLARE GLOBAL TEMPORARY TABLE
SESSION
SYSIBM.SYSTABLES
qpgpyjmq1#
简短的回答(据我所知)是否定的。声明的全局临时表(DGTT)不显示在目录中(正如你提到的)。Created Global Temporary Tables可以,但它们略有不同(请查看this other Stack Overflow answer of mine以了解差异)。如果你只需要知道表是否存在(例如,如果你试图稍后在应用程序中创建DGTT),你可以使用CONTINUE HANDLER:
CONTINUE HANDLER
DECLARE CONTINUE HANDLER FOR SQLSTATE '42710' SET DGTT_FOUND=1;
根据您的平台,SQLSTATE关键字可能是可选的。
SQLSTATE
epggiuax2#
我知道这是一个古老的故事。我也在找这个,发现下面的查询有帮助:
db2 "select substr(tabname, 1, 20) tabname, substr(tabschema,1,10) tabschema, temptabtype, tab_organization, substr(tbspace,1,12)tbspace from table (sysproc.admin_get_temp_tables(sysproc.mon_get_application_handle(),'','')) gtt, syscat.tablespaces tbspace where (tabname = 'TEMP_T1' ) and gtt.tbsp_id = tbspace.tbspaceid"
结果:
TABNAME TABSCHEMA TEMPTABTYPE TAB_ORGANIZATION TBSPACE -------------------- ---------- ----------- ---------------- ------------ TEMP_T1 SESSION D C SYSTOOLSTMPS 1 record(s) selected.
请注意,这可能取决于Db2版本。此信息仅在您的会话中有效。
2条答案
按热度按时间qpgpyjmq1#
简短的回答(据我所知)是否定的。声明的全局临时表(DGTT)不显示在目录中(正如你提到的)。
Created Global Temporary Tables可以,但它们略有不同(请查看this other Stack Overflow answer of mine以了解差异)。
如果你只需要知道表是否存在(例如,如果你试图稍后在应用程序中创建DGTT),你可以使用
CONTINUE HANDLER
:根据您的平台,
SQLSTATE
关键字可能是可选的。epggiuax2#
我知道这是一个古老的故事。我也在找这个,发现下面的查询有帮助:
结果:
请注意,这可能取决于Db2版本。此信息仅在您的会话中有效。