Oracle PL/SQL之ENABLE NOVALIDATE約束

來源:互聯網
上載者:User

在看Oracle約束時,看到ENABLE NOVALIDATE,意思是對自現在起及以後的資料啟用約束,但是不管以前的資料怎樣。

不過在實驗的時候卻出了一點小問題:

SQL> create table dept as select * from scott.dept where 1=2;</p><p>Table created</p><p>SQL> insert into dept select * from scott.dept where deptno=10;</p><p>1 row inserted</p><p>SQL> insert into dept select * from scott.dept where deptno=10;</p><p>1 row inserted</p><p>SQL> commit;</p><p>Commit complete</p><p>SQL> ALTER TABLE dept ADD (UNIQUE(deptno) ENABLE NOVALIDATE);</p><p>ALTER TABLE dept ADD (UNIQUE(deptno) ENABLE NOVALIDATE)</p><p>ORA-02299: cannot validate (XXPO.SYS_C00830643) - duplicate keys found</p><p>SQL>
Google一下,發現原來在建立沒有延時的UNIQUE或者PRIMARY KEY時會自動去建立一個唯一性索引。(By default a non-deferrable UNIQUE or PRIMARY KEY constraint will attempt to create a unqiue index. http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:8806498660292)

加上DEFERRABLE關鍵字,問題成功解決:

SQL> ALTER TABLE dept ADD (UNIQUE(deptno) DEFERRABLE ENABLE NOVALIDATE);</p><p>Table altered</p><p>SQL>
asktom上還有另外一種通過自己手動先建立一個普通索引的解決方案,有興趣的同學可以看看。

Ref:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:8806498660292

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.