我已搜查,但不能得到這樣的回答(也許錯關鍵字...)Oracle_How插入從低速選擇查詢數據到兩個表
我來這個問題,今天,當我需要創建一個過程以2種不同的模式計算要保存到2個報表的數據。假設這兩個表具有相同的結構。
計算的數據可能需要超過60秒的查詢(數據可能會或可能不會,如果再次運行更改SELECT衆所周知聲明的結果)
我有兩個方式接入數據,這兩個表:
- 只需運行插入兩個時間與同一選擇查詢。
- 使用GTT全局臨時表保存SELECT查詢中的計算數據,然後使用該GTT中的數據INSERT到這兩個表。
不知甲骨文將保留結果的緩存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
;
GTT聽起來像是要走的路。如果作爲同一事務的一部分運行select語句兩次,即使查詢中的數據發生更改,它實際上也應該產生相同的結果。如果您在查詢之間提交,則可以更改。如果你不在乎,GTT將交易內存(暫時)以重新運行查詢的費用 - 對於60秒的查詢,這是一個很好的交易 – Hambone
請注意,句子「_如果你運行select語句兩次作爲同一事務的一部分,它實際上應該產生相同的結果_「是不正確的。 – nop77svk