Oracle,从一个会话中选择数据,但将其提交到另一个会话,这可能吗?

vaj7vani  于 2023-01-30  发布在  Oracle
关注(0)|答案(2)|浏览(153)

也许我要求的是不可能的事,但我还是要问。
是否有一种简单的方法可以从一个Oracle会话中进行选择,然后将insert/commit切换到另一个会话?
(我想,从技术上讲,可以使用pl/sql过程调用和PRAGMA AUTONOMUS Transactions来完成,但这会很麻烦)
我有下面的场景:
我运行了一些繁重的计算和update/insert into一些表。在这个过程完成后,我想"备份"结果(create table as selectinsert into另一个临时表),然后rollback我的当前会话,而不会丢失备份。
以下是期望/预期行为:

    • Oracle 11g**
insert into TableA (A,B,C) values (1,2,3);

select * from TableA 

Result:    1,2,3

create table [in another session] TempA 
as select * from TableA [in this session];

rollback;

select * from TableA;

Result null
select * from TempA;

Result 1,2,3

这可能吗?

cgvd09ve

cgvd09ve1#

是否有一种简单的方法可以从一个Oracle会话中进行选择,然后将insert/commit切换到另一个会话?
用第三方语言(C++、Java、PHP等)创建一个程序,打开两个到数据库的连接;无论您是以不同用户身份连接还是以同一用户身份连接,它们都将具有不同的会话。2从一个连接读取并写入另一个连接。

thigvfpy

thigvfpy2#

您可以将“繁重的计算”插入Oracle临时表中。

CREATE GLOBAL TEMPORARY TABLE HeavyCalc (
  id           NUMBER,
  description  VARCHAR2(20)
)
ON COMMIT DELETE ROWS;

诀窍在于当你提交事务时,所有的行都从临时表中删除。
然后,首先将数据插入临时表,将结果复制到备份表,然后提交事务。

相关问题