为什么在这种情况下会出现保存点错误?

Why does a savepoint error appear in this situation?

为什么执行这个块会出现错误"ORA-01086: savepoint 'X' never established in this session or is invalid"?

begin

  savepoint X;

  execute immediate 'alter package ANY_EXISTING_PACKAGE compile';

  rollback to X;

end;

DDL 在 运行 之前执行隐式提交,然后回滚或提交。因此,在尝试编译您的包后,您在上例中的保存点 X 不再适用。

参见:http://docs.oracle.com/cd/E11882_01/server.112/e40540/sqllangu.htm#sthref808