Welcome 微信登录

首页 / 数据库 / MySQL / Oracle PL/SQL之ENABLE NOVALIDATE约束

在看Oracle约束时,看到ENABLE NOVALIDATE,意思是对自现在起及以后的数据启用约束,但是不管以前的数据怎样。不过在实验的时候却出了一点小问题:
  1. SQL> create table dept as select * from scott.dept where 1=2;  
  2.    
  3. Table created  
  4.    
  5. SQL> insert into dept select * from scott.dept where deptno=10;  
  6.    
  7. 1 row inserted  
  8.    
  9. SQL> insert into dept select * from scott.dept where deptno=10;  
  10.    
  11. 1 row inserted  
  12.    
  13. SQL> commit;  
  14.    
  15. Commit complete  
  16.    
  17. SQL> ALTER TABLE dept ADD (UNIQUE(deptno) ENABLE NOVALIDATE);  
  18.    
  19. ALTER TABLE dept ADD (UNIQUE(deptno) ENABLE NOVALIDATE)  
  20.    
  21. ORA-02299: cannot validate (XXPO.SYS_C00830643) - duplicate keys found  
  22.    
  23. 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关键字,问题成功解决:
  1. SQL> ALTER TABLE dept ADD (UNIQUE(deptno) DEFERRABLE ENABLE NOVALIDATE);  
  2.    
  3. Table altered  
  4.    
  5. SQL>   
Oracle DBA之手动地通过命令行的方式创建一个数据库Oracle PL/SQL之不能在function里面调用DBMS_LOCK(Grant to role OR Grant to user)相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数