我已搜索但无法得到答案(可能是错误的关键字......)
我今天遇到这个问题,当我需要创建一个程序来计算数据,以便在2个不同的模式中保存到2个报告表。假设这两个表具有相同的结构。
计算数据的查询可能需要60秒以上(如果再次运行,数据可能会也可能不会改变SELECT状态的结果)
我有两种方法可以将数据插入到这两个表中:
- 只需使用相同的选择查询运行插入两次。
- 使用GTT - 全局临时表来保存SELECT查询中的计算数据,然后使用该GTT中的数据INSERT到这两个表。
醇>
我想知道Oracle是否会保留SELECT查询的结果缓存,以便第一种方式将具有更好的性能,然后第二种方式(但是代码更长,代码重复,不同步?)。
那么有人可以确认并解释为我解决这个问题的正确方法吗?或者更好的方法呢?
谢谢,
附录1:
INSERT INTO report_table (col1, col2, ....)
SELECT .....
FROM .....
--(long query)
;
INSERT INTO center_schema.report_table (col1, col2, ....)
SELECT .....
FROM .....
--same select query as above
;
而且2:
INSERT INTO temp_report_table(col1, col2, ...)
SELECT .....
FROM .....
--(long query)
;
INSERT INTO report_table (col1, col2, ....)
SELECT col1, col2, ....
FROM temp_report_table
;
INSERT INTO center_schema.report_table (col1, col2, ....)
SELECT col1, col2, ....
FROM temp_report_table
;
答案 0 :(得分:1)
不,你有第三种选择 - 精彩的多插入......
class int32
{
// conversion operator
operator int() const
{
int ret = // your logic
return ret;
}
}
有关一次加载多个表的好方法的详细信息,请参阅Oracle documentation的相应部分。