写这篇的目的是为了自己以后更好的复习,很多都是参照网上的。

oracle约束可以检查出不符合业务的需求

Oracle约束按约束状态又可分为disable novalidate,disable validate,enable novalidate,enable validate. 其中disable/enable代表是否启用约束,validate/novalidate代表启用约束时是否对表中原有数据作检查。

1.创建表

 create table t1(

id number,

name varchar2(20));

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

insert into t1 values(1,'B');
commit

2.添加约束条件(约束条件很多,check,NOT NULL 等) 准备在下篇中详细介绍

 alter table t1 add constraint pk_t1 primary key (id)  deferrable enable novalidate;

   此时主键已经生效,但源表中包含不符合约束的数据

3.如果将约束状态更改为 enable validate,却发现原有数据有问题

   alter table t1 enable validate constraint pk_t1;(会报错

4.建立一个异常表(这两种都可以的)

 

SQL>@D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlexpt1.sql 
create table exceptions(row_id rowid,

owner varchar2(30),

table_name varchar2(30),

constraint varchar2(30));

5.然后将异常数据插入异常表

alter table t1 enable validate constraint pk_t1 exceptions into exceptions; 

6.根据对应表找出对应的异常数据进行修改

select id,name from t1 where rowid in(

select row_id from exceptions) FOR UPDATE;





 

posted on 2012-02-12 21:51  无尽的缥缈  阅读(441)  评论(0编辑  收藏  举报