2010-11-29 48 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行临时表是非常不寻常的。