首页 > 解决方案 > DB2 SQL 语句 - 是否可以 A) 声明一个临时表 B) 用数据填充它然后 C) 对它运行一个 select 语句?

问题描述

我对 DB2 数据库具有只读访问权限,并且我想创建一个仅存在于 SQL 中的“运行中/运行中”或临时表,然后用值填充它,然后将结果与现有表进行比较。

到目前为止,我正在尝试验证前提并编译以下查询,但无法使用 select 语句获取任何内容。

任何人都可以帮助我解决我做错的事情或就我试图做的事情提供建议吗?(或者也许是一种更好的做事方式)

谢谢贾斯汀

--Create a table that only exists within the query 
DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMPEVENT (EVENT_TYPE INTEGER);

--Insert a value into the temporary table
INSERT INTO SESSION.TEMPEVENT (EVENT_TYPE) VALUES ('1');

--Select all values from the temporary table
SELECT * FROM SESSION.TEMPEVENT;

--Drop the table so the query can be run again
DROP TABLE SESSION.TEMPEVENT;

标签: sqldb2

解决方案


如果您查看DECLARE GLOBAL TEMPORARY TABLE语句的语法图,您可能会注意到以下块:

     .-ON COMMIT DELETE ROWS---.      
--●--+-------------------------+--●----------------------------  
     '-ON COMMIT PRESERVE ROWS-'      

这意味着这ON COMMIT DELETE ROWS是默认行为。如果您在autocommit打开模式的情况下发出语句,则commit在每条语句之后自动发出的语句会隐式地删除,这会删除 DGTT 中的所有行。
如果您希望 DB2 在提交时不删除 DGTT 中的行,则必须ON COMMIT PRESERVE ROWS在 DGTT 声明中显式指定子句。


推荐阅读