从Oracle9i开始,Oracle允许对于视图(view)进行主键、唯一键、外键约束的声名。NOT NULL约束可以从基表继承,所以不允许显示声明。
由于视图约束仅仅是声明而已,所以其状态只能是DISABLE NOVALIDATE。 以下是一个简单范例说明: SQL> CREATE VIEW d10_emp 2 ( empno, ename, job,deptno, 3 CONSTRAINT pk_d10 4 PRIMARY KEY (ename) 5 RELY DISABLE NOVALIDATE 6 ) AS 7 SELECT empno, ename, job ,deptno 8 FROM emp 9 WHERE deptno = 10; View created.SQL> select * from d10_emp; EMPNO ENAME JOB DEPTNO---------- ---------- --------- ---------- 7782 CLARK MANAGER 10 7839 KING PRESIDENT 10 7934 MILLER CLERK 10SQL> select CONSTRAINT_NAME,TABLE_NAME,CONSTRAINT_TYPE from user_constraints 2 where table_name='D10_EMP';CONSTRAINT_NAME TABLE_NAME C------------------------------ ------------------------------ -PK_D10 D10_EMP P 由于此约束仅仅为"约束声明",所以不具有实际约束力: SQL> insert into d10_emp values(7777,'EYGLE','MANAGER',10);1 row created.SQL> insert into d10_emp values(8888,'EYGLE','MANAGER',10);1 row created.SQL> select * from d10_emp; EMPNO ENAME JOB DEPTNO---------- ---------- --------- ---------- 7782 CLARK MANAGER 10 7839 KING PRESIDENT 10 7934 MILLER CLERK 10 7777 EYGLE MANAGER 10 8888 EYGLE MANAGER 10 ----- 下一篇:Oracle热备期间的过量Redo生成控制 我们都知道为了防止热备期间的分裂块问题,Oracle在热备过程中会对修改块进行全块的Redo记录. 偶然发现居然还存在一个隐含参数可以控制这个行为: SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ 2 FROM SYS.x$ksppi x, SYS.x$ksppcv y 3 WHERE x.inst_id = USERENV ('Instance') 4 AND y.inst_id = USERENV ('Instance') 5 AND x.indx = y.indx 6 AND x.ksppinm LIKE '%&par%' 7 / Enter value for par: blocks ...[查看详情] |