回滚命令不起作用 - Oracle

kus*_*lvm -4 oracle sqlplus rollback dml oracle11g

我丢了一张桌子试图回滚,但没用.它会像这样工作还是我在这里玩错了?

从大多数注释中可以看出,DDL语句不能通过回滚来解除,而只能通过FLASHBACK来解除.

我尝试撤消DELETE FROM STUDENT;

它仍然无法撤消:

我的执行令是

  • 插入,

  • 删除,

  • ROLLBACK.

Mik*_*ark 13

我不相信回滚会撤消架构更改.

  • 正确.DDL语句无法在Oracle中回滚 (3认同)

Jus*_*ave 5

ROLLBACK 没有保存点限定符将回滚整个当前事务。

对于 DDL 语句,没有要回滚的当前事务。DDL 语句COMMIT在语句开始之前和完成之后隐式生成一个。因此,如果您发出ROLLBACK以下 a DROP,则当前事务中尚未完成任何工作,因此没有任何可回滚的内容。

对于 DML 语句,您将回滚整个当前事务。如果你这样做

  • 插入
  • 删除
  • 回滚

当您执行INSERT操作时,您的交易就开始了。因此,当您发出 时ROLLBACK,您将同时回滚 theINSERT和 the,DELETE因此表中没有数据(假设您开始时没有数据)。如果您COMMIT在 之后,INSERT则下一个事务将以 开始,DELETE并且您ROLLBACK只会回滚该DELETE操作。或者,您可以在 之后声明一个保存点INSERT并回滚到该保存点

SQL> create table foo( col1 number );

Table created.

SQL> insert into foo values( 1 );

1 row created.

SQL> savepoint after_insert;

Savepoint created.

SQL> delete from foo;

1 row deleted.

SQL> rollback to savepoint after_insert;

Rollback complete.

SQL> select * from foo;

      COL1
----------
         1
Run Code Online (Sandbox Code Playgroud)