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

时间:2019-02-13 02:55:47

标签: sql db2

我对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;

1 个答案:

答案 0 :(得分:1)

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

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

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