我有一个Oracle过程,在该过程中我想执行以下操作:
目前 ,我正在使用FOR循环分别处理每个记录。这可行,但是做很多我认为可能更简单的代码。
我想要:
这看起来很简单,只有一个INSERT和一个具有相同WHERE子句的UPDATE语句。但是,在执行这两个语句之间的时间中,可能会插入更多需要复制的记录。如果我使用相同的WHERE子句,则可能会将记录标记为已处理,但实际上尚未处理。
有没有一种方法可以保存主键列表以在两个语句中使用或合并语句?还是您会建议我坚持使用FOR循环并一次处理一个记录?欢迎所有建设性意见。
如果您运行这两个语句 within a transaction ,则任何失败都将导致插入和更新都被回滚。
within a transaction
insert into tgt.. select * from src where <condition> and row_status <> 'copied'; --ignoring records after they have been copied once? update src set row_status = 'copied' where <same_where_condition_as_before> commit;
如果读取后在源表中插入了新行,则可能需要再次运行该块,并在适当的地方更改条件。