检查条件约束

Dav*_*gar 3 sql oracle ddl constraints oracle11g

我想知道这个条件是否可以通过检查约束来完成,或者我是否需要创建一个触发器。

条件:如果学生录取日期不为空,则考试成绩为空

备注:Contain case OR Trigger

我尝试过的:

ALTER TABLE ADMITED_TABLE
ADD CONSTRAINT AAAA CHECK
 ( CASE  WHEN  DATEADMITED IS NOT NULL THEN MARK NULL END);
Run Code Online (Sandbox Code Playgroud)

错误:

ORA-00920: invalid relational operator
00920. 00000 -  "invalid relational operator"
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 5

检查约束采用布尔条件,因此您必须以这样的条件的形式构建此逻辑:

ALTER TABLE ADMITED_TABLE
ADD CONSTRAINT AAAA CHECK
(dateadmited IS NULL OR mark IS NULL);
Run Code Online (Sandbox Code Playgroud)

  • @Mureinik - 为什么这么复杂?更简单:“(dateadmissed 为 null 或 mark 为 null)” (2认同)
  • @DavidEdgar 这将解决你的问题,但只是部分解决。如果表中已有行,且两个值均非 NULL,则它们将继续存在于表中;只有新行才会受到约束(以及对现有行的修改)。您或您的企业将选择如何处理违反约束的现有行,这是一个单独的业务决策(可能会给您和您的团队带来更多工作)。 (2认同)