在看Oracle约束时,看到ENABLE NOVALIDATE,意思是对自现在起及以后的数据启用约束,但是不管以前的数据怎样。不过在实验的时候却出了一点小问题:
- SQL> create table dept as select * from scott.dept where 1=2;
-
- Table created
-
- SQL> insert into dept select * from scott.dept where deptno=10;
-
- 1 row inserted
-
- SQL> insert into dept select * from scott.dept where deptno=10;
-
- 1 row inserted
-
- SQL> commit;
-
- Commit complete
-
- SQL> ALTER TABLE dept ADD (UNIQUE(deptno) ENABLE NOVALIDATE);
-
- ALTER TABLE dept ADD (UNIQUE(deptno) ENABLE NOVALIDATE)
-
- ORA-02299: cannot validate (XXPO.SYS_C00830643) - duplicate keys found
-
- 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);
-
- Table altered
-
- 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)