Oracle Merge Sql 在目标中插入并从源中删除

Oracle Merge Sql with insert in destination and delete from source

我有一个场景,其中我有 2 个表,第一个是源表(my_data),第二个是目标表(my_data_backup),我想某种归档 的实际数据,每天将该数据移动到备份 table 并从源 table 中删除 在 oracle 中使用合并 SQL .

my_data 和 my_data_backup 都有相同的架构

my_data table 包含 10 行并且 my_data_backup 包含 0 行我想将 10 条记录插入 my_data_backup 并删除这些记录来自 my_data.

MERGE 对目标 table 而非源进行操作很有用。

您可以使用匿名 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,当 table 大小较大时,它会更快,但请注意,作为 DDL,它会进行隐式提交。

execute immediate 'truncate table tablename';