【问题标题】:Check Constraint For A Defaulting Value检查默认值的约束
【发布时间】:2016-02-21 18:57:47
【问题描述】:

我被卡住了,无法弄清楚如何将条件添加到 oracle 中的 CHECK 约束中...... 基本上我有一个具有以下结构的表:

CREATE TABLE TEST_TBL
(
    COL_1 VARCHAR2(100) NOT NULL,
    COL_2 VARCHAR2(100) NOT NULL,
    COL_3 VARCHAR2(100) NOT NULL,
    COL_4 VARCHAR2(100) NOT NULL,
    DEF_COL CHAR(1) DEFAULT 'Y',
    CONSTRAINT def_check_const
    CHECK (???????)
);

此表中可能有多个值,但我要求在 DEF_COL 列中只能输入“Y”或“N”。我还想添加一个约束来将 DEF_COL 列中“Y”的数量限制为一个。 DEF_COL 列可能允许有多个“N”条目。请有人指导我如何在创建表查询的检查部分添加约束?

提前谢谢....

【问题讨论】:

    标签: oracle


    【解决方案1】:

    Oracle 设置

    CREATE TABLE TEST_TBL(
        COL_1 VARCHAR2(100) NOT NULL,
        COL_2 VARCHAR2(100) NOT NULL,
        COL_3 VARCHAR2(100) NOT NULL,
        COL_4 VARCHAR2(100) NOT NULL,
        DEF_COL CHAR(1)     DEFAULT 'Y'
                            CONSTRAINT def_check_const
                              CHECK ( DEF_COL IN ('Y', 'N' ) )
    );
    
    CREATE UNIQUE INDEX def_col_only_one_y__U
      ON TEST_TBL( CASE DEF_COL WHEN 'Y' THEN 'Y' END );
    

    插入一行

    INSERT INTO TEST_TBL VALUES ( 'A1', 'A2', 'A3', 'A4', 'Y' );
    
    1 rows inserted.
    

    插入带有DEF_COL = 'Y'的第二列

    INSERT INTO TEST_TBL VALUES ( 'B1', 'B2', 'B3', 'B4', 'Y' )
    
    Error report -
    SQL Error: ORA-00001: unique constraint (TEST.DEF_COL_ONLY_ONE_Y__U) violated
    00001. 00000 -  "unique constraint (%s.%s) violated"
    *Cause:    An UPDATE or INSERT statement attempted to insert a duplicate key.
               For Trusted Oracle configured in DBMS MAC mode, you may see
               this message if a duplicate entry exists at a different level.
    *Action:   Either remove the unique restriction or do not insert the key.
    

    更新

    如果 3 列的每个唯一组合只有一个 Y,请尝试:

    CREATE UNIQUE INDEX C1_2_3__def_col_only_one_y__U
          ON TEST_TBL( COL1, COL2, COL3, CASE DEF_COL WHEN 'Y' THEN 'Y' END );
    

    【讨论】:

    • 您好@MT0,是否也可以根据 col_1、col_2 和 col_3 的值拥有多个“Y”条目。所有这三列都将包含唯一值。
    猜你喜欢
    • 2019-08-15
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多