insert語句中append提示對欄位的檢查

to_be_Dba發表於2013-03-14

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部落格 ” ,連結:http://blog.itpub.net/26451536/viewspace-756107/,如需轉載,請註明出處,否則將追究法律責任。

相關文章