oracle 約束 enable validate 檢查

oracle_db發表於2009-12-10

 Oracle約束按約束狀態又可分為disable novalidate,disable validate,enable novalidate,enable validate. 其中disable/enable代表是否啟用約束,validate/novalidate代表啟用約束時是否對錶中原有資料作檢查。

 

      這裡模擬生產環境中的情況,先建一張沒有約束的表,等有一定資料後建立enable novalidate約束,進而執行enable validate來規範表中所有資料,具體如下:

 

      1. 建立原始表及資料

 

          SQL> create table t1(

                2  id number,

                3  name varchar2(20));

          SQL> insert into t1 values(1,'A');

          SQL> insert into t1 values(1,'B');

          SQL> insert into t1 values(2,'C');

          SQL> insert into t1 values(3,'D');

          SQL> insert into t1 values(3,'E');

          SQL> insert into t1 values(4,'F');

 

      2. 在表上建立enable novalidate主鍵

 

          SQL> alter table t1 add constraint pk_t1 primary key (id)

                2  deferrable enable novalidate;

 

          此時主鍵已經生效,但源表中包含不符合約束的資料

 

      3. 嘗試將約束狀態更改為 enable validate,卻發現原有資料有問題

 

          SQL> alter table t1 enable validate constraint pk_t1;

          alter table t1 enable validate constraint pk_t1

          *

          第 1 行出現錯誤:

          ORA-02437: 無法驗證 (SCOTT.PK_T1) - 違反主鍵

 

      4. 找出違反約束的資料,刪除後生效

參考:http://sns.linuxpk.com/space.php?uid=52196&do=blog&id=16032

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15720542/viewspace-622176/,如需轉載,請註明出處,否則將追究法律責任。

相關文章