SQL> create table test1(id int,name char(10)); Table created. begin for i in 1 .. 1000000 loop insert into test1 values(i,'a'||i); end loop; commit; end; SQL> set timing on SQL> update test1 set id=9999 where id >100; 999900 rows updated. Elapsed: 00:01:22.37 SQL> DECLARE CURSOR cur IS SELECT a.ROWID from test1 a where a.id>100 ORDER BY a.ROWID; V_COUNTER NUMBER; BEGIN V_COUNTER := 0; FOR row IN cur LOOP UPDATE test1 SET id = 9999 WHERE ROWID = row.ROWID; V_COUNTER := V_COUNTER + 1; IF (V_COUNTER >= 10000) THEN COMMIT; V_COUNTER := 0; END IF; END LOOP; COMMIT; END; 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 / PL/SQL procedure successfully completed. Elapsed: 00:01:50.74 SQL> 更慢!!!!!!!!!