看下面的例子: CREATE TABLE temp (age NUMBER(3)); ALTER TABLE temp ADD CONSTRAINT ck_temp_age CHECK ((AGE>0) AND (AGE <= 125)); 现在我们能够插入Age表的集合是{1,2,…,125}或null,这和我们实际的现实生活是符合的。 为限制Age字段取值范围不能为空,增加not null约束。 CREATE TABLE temp (age NUMBER(3) NOT NULL); ALTER TABLE temp ADD CONSTRAINT ck_temp_age CHECK ((AGE>0) AND (AGE<=125)); 下面的操作就会获得一个oracle错误: SQL> insert into temp values (130); insert into temp values (130) * ORA-02290: check constraint (SCOTT.CK_TEMP_AGE) violated. 当Oracle 执行插入操作时,会检查Check约束条件表达式结果是否为TRUE,不为TRUE则拒绝执行。 Check约束可以使用组合条件: CREATE TABLE temp (a NUMBER); ALTER TABLE temp ADD CONSTRAINT ck_temp_a CHECK (((a>=0) AND (a<=10)) OR (a=999) OR (a=9999)); Oracle中没有Boolean类型,PL/SQL有Boolean类型.为了替代一个boolean列使用check约束 CREATE TABLE temp(enabled NUMBER(1) NOT NULL); ALTER TABLE temp ADD CONSTRAINT ck_temp_enabled CHECK (enabled IN (0, 1)); 也可以使用varchar2类型 CREATE TABLE temp(enabled VARCHAR2(1) NOT NULL); ALTER TABLE temp ADD CONSTRAINT ck_temp_enabled CHECK (enabled IN ('T', 'F', 't', 'f')); CREATE TABLE temp(status VARCHAR2(16) NOT NULL); ALTER TABLE temp ADD CONSTRAINT ck_temp_status CHECK (status IN ('RECEIVED','APPROVED','WAITING APPROVAL')); 一、多字段约束 Check约束可以是一个多字段的组合,如下: CREATE TABLE box (length NUMBER(2) NOT NULL, width NUMBER(2) NOT NULL, height NUMBER(2) NOT NULL); ALTER TABLE box ADD CONSTRAINT ck_box_volume CHECK ((length*width*height<100) AND (length > 0) AND (length <= 10) AND (width > 0) AND (width <= 10) AND (height > 0) AND (height <= 10)); 也可以以不同的名字定义多个Check约束 ALTER TABLE box ADD CONSTRAINT ck_box_length CHECK ((length > 0) AND (length <= 10)); ALTER TABLE box ADD CONSTRAINT ck_box_width CHECK ((width > 0) AND (width <= 10)); ALTER TABLE box ADD CONSTRAINT ck_box_height CHECK ((height > 0) AND (height <= 10)); ALTER TABLE box ADD CONSTRAINT ck_box_dimension CHECK ((length*width*height<100)); 二、补充Unique约束 Check约束可以被用于多行非空约束,即同时为空或同时不为空。Unique约束的两个字段可能有一个为null,而另一个不为null,如果我们不想它出现这种情况,我们就可以用Check约束: (both columns are NULL) OR (both columns are NOT NULL) CREATE TABLE temp (pk NUMBER PRIMARY KEY, a NUMBER, b NUMBER); ALTER TABLE temp ADD CONSTRAINT uk_temp_a_b UNIQUE (a, b); ALTER TABLE temp ADD CONSTRAINT ck_temp_a_b CHECK ((a IS NULL AND b IS NULL) OR (a IS NOT NULL AND b is NOT NULL));
Oracle check的使用,ORACLE CHECK CONSTRAINT使用示例
最新推荐文章于 2023-08-02 14:35:53 发布