TOM的《Expert one-on-one Oracle》第四章关于事务的论述中讲到:
  Oracle:在Oracle中没有‘开始事务’语句。事务隐式地开始于第一条修改数据的语句(第一条得到TX锁定的语句)。发出一条COMMIT或ROLLBACK语句显式地结束事务。总是用COMMIT或ROLLBACK语句显式地结束事务,否则使用的工具/环境将会自动选择其中的一条语句。如果没有提交或回滚而正常退出SQL*PLUS会话,SQL*PLUS将假定您想要提交工作,并且这样做。
  Sybase和SQL Server:必须显式地BEGING(开始)事务,否则每条单独的语句本身是一个事务。在Oracle中也有类似的方法,在不连续的语句附近加上SavePoint,在单条语句附近加上BEGIN WORK/COMMIT或ROLLBACK。这是因为在这些单独数据库中,锁定是一个宝贵的资源,并且读取阻塞写入器,写入器阻塞读取器。为了偿试提高并行性,希望事务尽可能地短,有时甚至以数据完整性为代价。
  Oracle采用了相反的方法。事务总是隐式的,没有办法‘自动提交’,除非应用程序来执行。在Oracle中,每个事务必须在需要时提交,绝不能提前。事务的过程不应被压缩。像锁定、阻塞等问题不必认真考虑,因为在事务大小的后面,数据完整性是驱动力。锁定不是稀少的资源,在数据的并行读取和写入之间也没有竞争的问题。这一点保证数据库中有健壮的事务,这些事务不必压缩。事务不是为了方便计算机和软件,而是用来保护数据的。
面对更新多行的任务,大多数程序员在循环中使用过程化的方法,这样能逐行地提交。这样做的原因主要有两个:
  1、经常提交一些小事务比执行和提交一个大的要快,效率高。
  2、没有足够的回滚段空间。
  这两个结论都是被误导的。一般地,频繁提交并不快,而用单条SQL语句完成几乎总是比较快的。(后面TOM写了个例子,比较长,懒得抄了~,记得TOM在前面讲‘采用简单方法’的时候有说:如果能在SQL中完成就在SQL中完成,如果不能,就在PL/SQL中完成(SQL Server就用T-SQL)中完成。记住罗~~)有点手酸-_-