小编Bac*_*Man的帖子

Oracle Check Constraint

我一直在努力解决这个检查约束几个小时,并希望有人能够解释为什么这个检查约束没有做我认为它应该做的事情.

ALTER TABLE CLIENTS
add CONSTRAINT CHK_DISABILITY_INCOME_TYPE_ID CHECK ((IS_DISABLED IS NULL AND DISABILITY_INCOME_TYPE_ID IS NULL) OR (IS_DISABLED = 0 AND DISABILITY_INCOME_TYPE_ID IS NULL) OR (IS_DISABLED = 1));
Run Code Online (Sandbox Code Playgroud)

基本上,您必须被禁用以收集残疾收入.看起来似乎(IS_DISABLED IS NULL AND DISABILITY_INCOME_TYPE_ID IS NULL)没有强制执行此检查约束的第一部分(见下文).

可用值为DISABILITY_INCOME_TYPE_ID1和2,通过外键强制执行.双方IS_DISABLEDDISABILITY_INCOME_TYPE_ID可以为空.

-- incorrectly succeeds (Why?)
INSERT INTO CLIENTS (IS_DISABLED, DISABILITY_INCOME_TYPE_ID) VALUES (null, 1);
INSERT INTO CLIENTS (IS_DISABLED, DISABILITY_INCOME_TYPE_ID) VALUES (null, 2);

-- correctly fails
INSERT INTO CLIENTS (IS_DISABLED, DISABILITY_INCOME_TYPE_ID) VALUES (0, 1);
INSERT INTO CLIENTS (IS_DISABLED, DISABILITY_INCOME_TYPE_ID) VALUES …
Run Code Online (Sandbox Code Playgroud)

oracle constraints

3
推荐指数
1
解决办法
4408
查看次数

标签 统计

constraints ×1

oracle ×1