http://blog.itpub.net/16628454/viewspace-1034986/
今天写了一段PL/SQL代码,极其简单,却让我愣了一下
begin
for i in 1 .. 24 loop
insert /*+ APPDEND*/
into ttt_2
select t_seq_2.nextval, a.* from dba_objects a;
end loop;
commit;
end;
看似没什么错,对不?其实不是的,当你运行上面的逻辑时,就会出现ORA-12838的错误,原因是加了APPEND以后必须立刻提交,才可以对表进行第二次操作,操作包括SELECT和DML。在循环中,一次循环就是一次DML,24次循环实际上是要做24个DML操作,那么,COMMIT换一下位置就好了。
begin
for i in 1 .. 24 loop
insert /*+ APPDEND*/
into ttt_2
select t_seq_2.nextval, a.* from dba_objects a;
commit;
end loop;
end;