2017-03-01 28 views
0

我有一個場景,其中我有2個表第一個是源(my_data)和第二個是目的地(my_data_backup),我想要某種歸檔的實際數據和將該數據每天移動到備份表中,並使用Oracle中的合併SQL從源表中刪除。Oracle合併Sql插入目的地並從源刪除

my_data和my_data_backup 都具有相同的架構

my_data表包含10行和my_data_backup包含0行我想插入10個記錄到my_data_backup和my_data刪除這些記錄。

+0

可以說第二次運行時,你還有5行my_data。現在應該備份包含15行,my_data應該再次爲空?另外備份表中的關鍵是什麼?你確定密鑰不再來自'my_data'嗎? – Utsav

+0

是的,正確的是兩者都沒有重複,在一天結束時,我將把數據從my_data移動到my_data_backup。 –

+0

你在這裏談論什麼數據量? – BobC

回答

1

MERGE對目標表上的操作非常有用,而不是源。

您可以使用匿名PLSQL塊:

begin 
    delete from my_data_backup; 
    insert into my_data_backup 
    select * 
    from my_data; 
    delete from my_data; 
    commit; 
exception 
    when others then 
     rollback; 
     -- handle here 
end; 
/

你也可以把上面的程序並調用程序。

您可以考慮使用truncate語句而不是delete,這會在表大小較大時更快,但要小心它作爲DDL會執行隱式提交。

execute immediate 'truncate table tablename'; 
+0

我不想使用存儲過程創建它使用Oracle Merge SQL我想要這個,請你幫我解決這個問題 –

+0

@ NikhiK.Bansal - 上面是**不是**存儲過程,它是一個匿名塊 – GurV

+0

@ Gurv-我可以從java代碼運行這個,或者我必須把這個查詢塊放在datbase的某個地方。 –