Oracle_How将慢速选择查询中的数据插入两个表

时间:2016-10-07 04:31:41

标签: sql oracle11g

我已搜索但无法得到答案(可能是错误的关键字......)

我今天遇到这个问题,当我需要创建一个程序来计算数据,以便在2个不同的模式中保存到2个报告表。假设这两个表具有相同的结构。

计算数据的查询可能需要60秒以上(如果再次运行,数据可能会也可能不会改变SELECT状态的结果)

我有两种方法可以将数据插入到这两个表中:

  
      
  1. 只需使用相同的选择查询运行插入两次。
  2.   
  3. 使用GTT - 全局临时表来保存SELECT查询中的计算数据,然后使用该GTT中的数据INSERT到这两个表。
  4.   

我想知道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
;

1 个答案:

答案 0 :(得分:1)

不,你有第三种选择 - 精彩的多插入......

class int32
{
    // conversion operator
    operator int() const
    { 
        int ret = // your logic
        return ret;
    }
}

有关一次加载多个表的好方法的详细信息,请参阅Oracle documentation的相应部分。