我有一個場景,其中我有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刪除這些記錄。
我有一個場景,其中我有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刪除這些記錄。
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';
我不想使用存儲過程創建它使用Oracle Merge SQL我想要這個,請你幫我解決這個問題 –
@ NikhiK.Bansal - 上面是**不是**存儲過程,它是一個匿名塊 – GurV
@ Gurv-我可以從java代碼運行這個,或者我必須把這個查詢塊放在datbase的某個地方。 –
可以說第二次運行時,你還有5行my_data。現在應該備份包含15行,my_data應該再次爲空?另外備份表中的關鍵是什麼?你確定密鑰不再來自'my_data'嗎? – Utsav
是的,正確的是兩者都沒有重複,在一天結束時,我將把數據從my_data移動到my_data_backup。 –
你在這裏談論什麼數據量? – BobC