Oracle check的使用,ORACLE CHECK CONSTRAINT使用示例(转载) .

看下面的例子:

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));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值