我使用临时表优化了复杂的Oracle语句,如下所示:
原作:
SELECT data FROM table WHERE ..complex statement..;
优化(我不能使用WITH关键字,因为我处理< Oracle9i):
CREATE GLOBAL TEMPORARY TABLE temptab (x NUMBER, y DATE) ON COMMIT DELETE ROWS;
INSERT INTO temptab SELECT * FROM temp;
SELECT data FROM temptab WHERE ..complex statement..;
COMMIT;
问题是:我必须在新数据库上执行这些语句。最好删除并创建临时表,或仅在存在时截断它?我该如何处理这个额外的表?
答案 0 :(得分:4)
您的临时表数据仅在交易范围内可见。
提交或回滚事务(或断开连接并重新连接)后,数据将消失。
每次运行查询时都不需要创建表:只需创建一次。
TRUNCATE
中的{p> Oracle
是一个DDL
操作(它提交它运行的事务)。
答案 1 :(得分:0)