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';
我有一个场景,其中我有 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';