我想检查用户的生日应该大于 18 岁。我使用了下面提到的检查约束。
(FLOOR((MONTHS_BETWEEN(DOB,SYSDATE))/12))>=18
DOB:表中的字段用于生日。
但发生了以下错误:
DOB 是无效的标识符。
谢谢!
我想检查用户的生日应该大于 18 岁。我使用了下面提到的检查约束。
(FLOOR((MONTHS_BETWEEN(DOB,SYSDATE))/12))>=18
DOB:表中的字段用于生日。
但发生了以下错误:
DOB 是无效的标识符。
谢谢!
在 Oracle 中,您不能在 CHECK 约束中引用系统变量。事实上,如果任何SQL dbms 允许这样做,我会感到有点惊讶,因为它使约束变得不确定。
我可以想到几种在数据库级别解决它的方法。
Oracle 文档明确指出,在检查约束上只允许使用确定性函数;sysdate
等systimestamp
是明确禁止的。 了解更多。
解决此限制的一种常见方法是利用数据模型。例如,您的 USERS 表是否有 REGISTRATION_DATE ?它当然应该有这样的东西。自然 REGISTRATION_DATE 将默认为sysdate
and,lo!您的约束变得合法:
(FLOOR((MONTHS_BETWEEN(REGISTRATION_DATE, DOB))/12))>=18
顺便说一下,注意参数的顺序MONTHS_BETWEEN()
是(later_date,更早的日期)。 检查出来。