如何将检查约束与SQL中的IF语句结合在一起?

问题描述

当我想像这样放置约束时,如何在sql中使用检查约束:

Y must be NOT NULL when X=‘hello’;
when X != ‘hello’ Y can be NULL

我尝试过这种方法,但是没有用。.

ALTER TABLE table
ADD ( CONSTRAINT cons CHECK ( X= ‘hello’ and Y!= NULL or X!= ‘hello’));

解决方法

如果我理解逻辑,则正确的语法是:

ALTER TABLE table ADD CONSTRAINT cons
    CHECK ( X = 'hello' and Y IS NOT NULL NULL OR X <> 'hello');
,

您可以使用:

ALTER TABLE table_name
  ADD CONSTRAINT cons CHECK ( Y IS NOT NULL OR X <> 'hello');

然后,如果您有:

CREATE TABLE table_name ( x VARCHAR2(5),y VARCHAR2(5) );

然后您可以插入以下值:

INSERT INTO table_name ( x,y )
SELECT 'hello','abc' FROM DUAL UNION ALL
SELECT 'other',NULL  FROM DUAL;

但是,如果您尝试:

INSERT INTO table_name ( x,y ) VALUES ( 'hello',NULL );

您会得到例外:

ORA-02290: check constraint (SCHEMA_NAME.CONS) violated

db 提琴here