按照Oracle的解释,insert all into其实是根据子查询执行了每个insert into子句,注意到上面SQL中每个into子句用的值都是字面量,子查询"select 1 from dual..."返回1条记录,支持每个insert into子句插入指定的1条记录,
“ALL into_clause: Specify ALL followed by multiple insert_into_clauses...2 b b b b
再次执行insert all into,则会插入4条记录,因为子查询,返回2条记录,
SQL> insert all
2 into a1(id, a, b, c, d)...a a a
1 b b b b
一种解决方式,是采用触发器,BEFORE INSERT在插入之前找到正确的序列,另外一种方式,就是创建函数,读取序列,他可以骗过Oracle,
SQL...此时能正常插入,而且id值,都正确了,
SQL> insert all
2 into a1(id, a, b, c, d) values (f_getseq, 'a', 'a', 'a'