SQL检查约束出生日期

时间:2018-05-04 19:53:51

标签: sql constraints

CREATE TABLE  "CUSTOMER" 

("CUS_ID" VARCHAR2(9), 
"NAME" VARCHAR2(30), 
"EMAIL" VARCHAR2(30), 
"BIRTH_DATE" DATE, 
"Mobile_number" NUMBER (10),
"Number_adopted" (number) (1),
 CONSTRAINT "CUSTOMER_PK" PRIMARY KEY ("CUS_ID")
 constraint "Email_uni" unique (EMAIL)
 constraint "Mobile_uni" unique (Mobile_number)
 constraint adopted_range_ck check ( Number_adopted >=1 and Number_adopted<=4) USING INDEX  ENABLE
);

我想创建一个客户不能小于18岁的约束。

1 个答案:

答案 0 :(得分:1)

您无法在Oracle中使用check约束执行此操作。正如documentation

中所定义
  

检查约束条件不能包含以下结构:

     
      
  • 子查询和标量子查询表达式

  •   
  • 调用不确定的函数(CURRENT_DATE,   CURRENT_TIMESTAMP,DBTIMEZONE,LOCALTIMESTAMP,SESSIONTIMEZONE,   SYSDATE,SYSTIMESTAMP,UID,USER和USERENV)

  •   

您需要一些当前时间的概念来计算年龄。

这是因为Oracle比其他数据库更严肃地对待检查约束。它们“永远”验证数据,而不仅仅是将数据加载到表中。

你可以用触发器做你想做的事。