2016-04-11 33 views
0

有沒有辦法只提交通過數據庫鏈接在表上插入/更新的數據,還有而不是當前會話的數據?還是他們認爲是同一個?Oracle PLSQL - 只提交數據庫鏈接

例如:

INSERT INTO main_database.main_table(value1, value2) 
VALUES (1 , 2) 

INSERT INTO [email protected]_link(value3, value4) 
VALUES (3 , 4) 

而且做只有數據庫鏈接表提交?

爲什麼我想要這樣做的背景: 主數據庫用於(多個)記錄,而數據庫鏈接用於(貨幣)交易(在單獨的服務器上處理)。我想首先更新記錄以檢查是否有任何約束失敗,但在事務完成之前不提交數據。如果事務失敗,我想回滾記錄以節省刪除/撤消插入/更新的工作,這可能會變得混亂。

我假設沒有,但我希望有一種方法。提前致謝。

+0

什麼是上下文?您可以在兩個語句之間創建一個保存點,回滾到保存點,然後提交。但是,這假設在第一個陳述之前沒有未提交的陳述,並且你可以整齊地分離兩部分工作。另外,如果你知道你總是想要提交遠程更改,那麼在第一條語句之後發佈一個顯式提交會更有意義。 –

+0

基本上,答案是否定的。但我很難理解你想要做什麼。你能給我們多一點信息嗎? –

+0

我已更新我的問題。 – Mocking

回答

1
create or replace procedure proc_1 (i IN number) 
as 
    PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    INSERT INTO [email protected]_sid (id, description) 
    VALUES (i, 'Description for ' || i); 
    COMMIT; 
END; 
/

create or replace procedure proc_base (i IN number) 
as 
begin 
    insert into local_tab (id) values (i); 
    proc_1(i); 
    rollback; 
end; 
/
+0

這對我有用。謝謝一堆。 – Mocking

0

如果插入是在PL/SQL,那麼你可以運行在一個自治事務第一次插入,但在沒有其他功能,這比插入有點不同......;承諾;插入...

+0

我很抱歉,這是PLSQL。你能舉一個自主交易的例子嗎? – Mocking

+0

我在下面發佈了一個示例pl/sql,它可能適合你,試試吧 –