2010-11-29 34 views
2

我在同一個Oracle用戶上有兩個不同的Oracle會話(「會話A」和「會話B」)。將數據加載到全局臨時表中

在「會話A」中填充全局臨時表,其中包含大約320,000條記錄。

如何快速在「會話B」的全局臨時表中插入相同的320,000條記錄?

非常感謝您的建議!

編輯:我忘了指定,我被允許創建只有全球臨時表。

編輯:我忘了說明,我不允許創建數據庫鏈接

+3

您可以改爲創建可供兩個會話訪問的表......更多信息將有助於 - Oracle的哪個版本,以及爲什麼需要臨時表? – 2010-11-29 17:01:07

+0

我只被允許創建全局臨時表... – UltraCommit 2010-11-29 17:27:00

+0

我使用的Oracle版本是:Oracle數據庫10G第2版 – UltraCommit 2010-11-29 17:27:51

回答

2

DBMS_PIPE是將信息從一個會話推送到另一個會話的「經典」機制。會話A將不得不將數據推入管道,而會話B將不得不將其拉出。

但是一般來說,數據庫的思想是會話是獨立的,任何共同性都在保存的數據中。反對這表明你正在使用錯誤的工具。

5

的數據的臨時表中是永遠只在當前會話中可見,所以我不認爲有一個沒有另一種方法去做你想做的事。

2

全局臨時表中的數據只對插入它的會話可見。因此,您將不得不運行與會話B中的表填充相同的過程。

當然,您似乎想要在兩個不同會話中訪問相同的320,000行的事實似乎意味着全局臨時表不是適用的數據結構。也許你想把這些數據加載到一個永久表中(如果你有多個SessionA/SessionB對,可能還需要一些標識符)。或者,也許會話B運行的任何邏輯應該由會話A運行。

僅僅退後一步,由於Oracle實現了多版本讀取一致性,因此讀者不會阻止編寫者和編寫者不會阻止讀者,首先需要一個320,000行臨時表是非常不尋常的。