MSG
------------------------------
some data
nonautonomous insert
//从结果我们得知,在上面这个匿名过程中的rollback就像没有工作一样的。
//原因在于,nonautonomous_insert过程中的commit起了作用。
//它提交了调用这个过程之前的所有操作,我们知道oracle的执行过程是从逐条语句执行的,
//当碰到错误语句之后,就停止在这里,转而处理错误语句,一般是抛出异常。
//为了保持事物的原子性和一致性,出现异常的事物都要整体回滚;
//当顺序执行到某一步时,出现了commit语句,那么就会将此前的所有操作提交;
//
//如果想要让调用过程中的提交语句独立于主事物,那么必须借助自治事务
//自治事物的工作:
begin
insert into ta values('some date');
autonomous_insert;
rollback;
end;
SQL> select * from ta;
MSG
------------------------------
autonomous insert
//在这里,匿名过程中的rollback起作用了,它将主事物中的insert回滚了,
//但是在自治事务中提交的操作就不受这个rollback控制了,
//这正是我们所说的自治事务独立于主事物的特性.
//
//如果在非自治事物过程中提交了操作,那么在此commit之前的所有操作都会提交,不能回滚
//如果在自治事物中提交了操作,那么此操作将会影响到该自治事务的所有操作,而不会影响到主事物的操作。