zoukankan      html  css  js  c++  java
  • 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));

  • 相关阅读:
    python数据分析学习(8)数据清洗与准备(2)
    python机器学习(1)
    python数据分析学习(7)数据清洗与准备(1)
    python数据分析学习(6)输入载入,存储及文件格式(1)文本格式数据的读写
    python+opencv实现机器视觉基础技术(边缘提取,图像滤波,边缘检测算子,投影,车牌字符分割)
    数据结构系统学习(2)算法
    数据结构系统学习(1)数据类型和数据结构的概念
    python数据分析学习(5)pandas描述性统计的概述与计算
    书单
    经济学人精读笔记19:凭一己之力引爆韩国疫情的邪教,究竟为何物
  • 原文地址:https://www.cnblogs.com/hy928302776/p/3160936.html
Copyright © 2011-2022 走看看