Oracle合并Sql与目标中的插入和源中的删除

Oracle合并Sql与目标中的插入和源中的删除,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我有一个场景,其中我有两个表,第一个是源表(my_data),第二个是目标表(my_data\u backup),我想对实际数据进行某种存档,每天将该数据移动到备份表中,并使用oracle中的合并SQL从源表中删除 i、 e “我的数据”和“我的数据”备份都有相同的模式 我的\u数据表包含10行,我的\u数据\u备份包含0行。我想在我的\u数据\u备份中插入10条记录,并从我的\u数据中删除这些记录。MERGE对目标表而不是源表进行操作很有用 您可以使用匿名PLSQL块: begin d

我有一个场景,其中我有两个表,第一个是源表(my_data),第二个是目标表(my_data\u backup),我想对实际数据进行某种存档,每天将该数据移动到备份表中,并使用oracle中的合并SQL从源表中删除

i、 e

“我的数据”和“我的数据”备份都有相同的模式


我的\u数据表包含10行,我的\u数据\u备份包含0行。我想在我的\u数据\u备份中插入10条记录,并从我的\u数据中删除这些记录。
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语句,当表大小较大时,delete语句会更快,但请注意,作为DDL,它将执行隐式提交

execute immediate 'truncate table tablename';

假设在第二次运行时,您还有5行my_数据。现在备份应该包含15行,而我的_数据应该再次为空吗?备份表中的键是什么?你确定密钥不会再次来自
my_data
吗?是的,正确,两者都没有重复性,在一天结束时,我会将数据从my_data移动到my_data_backup。你在这里指的是什么数据量?@BobC-表中每天大约1000行,我想将它们从我的\u数据移动到我的\u数据\u备份,并在EOD时从我的\u数据中删除这些行。我不想使用Oracle Merge SQL使用存储过程创建它我想要这个,你能帮我解决这个问题吗situation@NikhiK.Bansal-以上不是存储过程,是匿名的block@Gurv-我可以从java代码运行它,或者我必须将这一块查询放在datbase中的某个地方。我建议您在这种情况下创建一个过程,但这里有一个没有它的解决方案-好的,让我用匿名块尝试您的解决方案,这是可能的,或者不使用合并SQL。