gpt4 book ai didi

sql - 使用插入选择复制记录,然后更新同一组记录中的属性

转载 作者:搜寻专家 更新时间:2023-10-30 22:11:21 24 4
gpt4 key购买 nike

我有一个 Oracle 过程,我想在其中执行以下操作:

  1. 将记录从一个表复制到另一个
  2. 更新原始记录以表明它们已被复制

目前,我正在使用 FOR 循环来单独处理每条记录。这行得通,但要完成一些我认为可以更简单的事情需要很多代码。

我愿意:

  1. 消除 for 循环并使用 INSERT INTO ... SELECT ... 语句复制记录
  2. 如果复制成功,更新所有选中的记录。

这可能看起来很简单,只是一个 INSERT 和一个具有相同 WHERE 子句的 UPDATE 语句。但是,在执行这两个语句之间的时间里,可能会插入更多需要复制的记录。如果我使用相同的 WHERE 子句,我可能会将实际上尚未处理的记录标记为已处理。

有没有一种方法可以保存主键列表以在两个语句中使用或合并语句?或者您会建议我坚持使用 FOR 循环并一次处理一条记录吗?欢迎所有建设性意见。

最佳答案

如果您在一个事务中运行这两个语句,任何失败都将导致插入和更新都被回滚。

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;

如果在读取源表后有新行插入,您可能需要再次运行该 block ,并在适当的情况下更改 where 条件。

关于sql - 使用插入选择复制记录,然后更新同一组记录中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27608726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com