insert 语句中的append提示不仅可以通过直接寻址、少记录日志而达到加快速度的效果,在检查语句合法性方面也有额外的效果。如下例:
SQL> create table t(a number,b varchar2(20));
Table created
SQL> create sequence seq_t start with 1 ;
Sequence created
SQL> alter table t modify b not null;
Table altered
SQL> insert into t select seq_t.nextval,table_name from dba_tables where 1=2;
0 rows inserted
SQL> commit;
Commit complete
SQL> insert /*+append*/into t select seq_t.nextval,table_name from dba_tables where 1=2;
0 rows inserted
SQL> commit;
Commit complete
SQL> alter table t add c varchar2(10);
Table altered
SQL> alter table t modify c not null;
Table altered
SQL> insert into t select seq_t.nextval,table_name from dba_tables where 1=2;
insert into t select seq_t.nextval,table_name from dba_tables where 1=2
ORA-00947: 没有足够的值
SQL> insert into t(a,b) select seq_t.nextval,table_name from dba_tables where 1=2;
0 rows inserted
SQL> insert /*+append*/into t(a,b) select seq_t.nextval,table_name from dba_tables where 1=2;
insert /*+append*/into t(a,b) select seq_t.nextval,table_name from dba_tables where 1=2
ORA-01400: 无法将 NULL 插入 ("NB"."T"."C")
说明:如果表中某个字段为空,用未加hint:append的insert语句不会检查到我插入的字段中未包含非空列(这在测试时没有数据,而放到生产系统时原表含有数据时会导致报错);
hint:append添加后可以检查到此隐患并报错。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26451536/viewspace-756107/ ,如需转载,请注明出处,否则将追究法律责任。