回滚更新查询的更改

时间:2012-06-20 02:01:39

标签: sql oracle

UPDATE UPI_ATTRIBUTE SET SITE_INC ='0' 
WHERE USER_PROFILING_NAME IN ('CAR_IMPLICIT','CAR_EXPLICIT')

以上是我用来更新UPI_ATTRIBUTE表中的列的查询。并且假设我需要回滚我正在使用更新查询进行的上述更改,那么如何在上述情况下使用删除查询?目前SITE_INC为空。因此在更新表之后,它将具有0。如果我需要回滚更改,那么我需要再将它变为空。

如何在更新后从上面的列中删除值0。

2 个答案:

答案 0 :(得分:1)

您无法“删除”数据以回滚更新。

即使您要做的唯一更改是将标志从“NULL”设置为“Y”,反之亦然,但在进行多次更新时,无法确定要更新的值。

update 1 : set from "NULL" to "0"
update 2 : set from "0" to "something else"
update 3 : Rollback changes (rollback to which state)?

如果您想真正回滚对特定行的更改(而不是完整的表,可以使用Flashback完成),您可以审核更改以“记住”值,然后还原为它们。

即使这样,当你有多个更新时,你应该考虑恢复哪个点。

答案 1 :(得分:0)

不确定Oracle是否具有select / update的最终表/旧表函数。

对于DB2 for z / OS,它具有以下功能:

 SELECT LASTNAME, BONUS FROM FINAL TABLE
  (UPDATE EMP SET BONUS = BONUS * 1.3
          WHERE JOB = 'CLERK');

然后,select的结果集包括所有更新的行。您可以使用rownum或其他唯一值,然后您可以根据需要将其更新回任何值。