我一直在尝试创建一个临时表并更新它,但当我查看临时表时,它没有显示任何更新的行
declare global temporary table hierarchy (
code varchar(5)
description varchar(30);
INSERT INTO session.hierarchy
SELECT code, 30_description
FROM table1
WHERE code like '_....';
SELECT *
FROM session.hierarchy;
这是一个常见问题。
当将DGTT与Db2(声明全局临时表(一起使用时,您需要知道默认情况是在COMMIT
操作之后丢弃所有行。这就是插入后表显示为空的原因——如果启用了自动提交,则会删除行。如果这不是您想要的,那么在声明表时应该使用on commit preserve rows
子句。
在创建存储过程时,with replace
选项也非常重要,这对于开发和测试来说通常是最友好的,并且不是默认选项。否则,如果同一会话尝试重复DGTT的声明,则第二次和随后的尝试将失败,因为DGTT已经存在。
有时使用on rollback preserve rows
对问题确定也很有意思,但这种方法不太常用。
使用DGTT时,主要优点之一是可以安排取消标记表的填充(插入、更新(,如果有数百万行要添加到DGTT中,这可以极大地提高性能。
因此建议:
declare global temporary table ... ( )...
not logged
on commit preserve rows
with replace;
对于DPF安装,还应考虑使用distribute by hash (...)
以获得最佳性能。