我正在尝试添加检查约束以检查年龄和出生日期

用户名
CREATE TABLE "TEST"."AB_EMPLOYEE22" 
   (    "NAME" VARCHAR2(20 BYTE), 
    "AGE" NUMBER, 
    "SALARY" NUMBER, 
    "DOB" DATE
   ) 

alter table "TEST"."AB_EMPLOYEE22" add constraint
Age_check check((ROUND((sysdate-DOB)/365)) = AGE) ENABLE  

但是此查询不起作用。请帮我

124

您不能在检查约束中使用SYSDATE。根据Oracle文档-检查约束

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

  • 子查询和标量子查询表达式
  • 调用不确定的函数(CURRENT_DATE,
    CURRENT_TIMESTAMP,DBTIMEZONE,
    LOCALTIMESTAMP,SESSIONTIMEZONE,
    SYSDATE,SYSTIMESTAMP,UID,USER和USERENV)
  • 调用用户定义的函数
  • 取消引用REF列(例如,使用DEREF函数)
  • 嵌套表列或属性
  • 伪列CURRVAL,NEXTVAL,LEVEL或ROWNUM
  • 未完全指定的日期常量

因此,Trigger在这种情况下,您可以用来获取所需的输出。这是触发器,可以根据您的要求正常工作:

CREATE OR REPLACE TRIGGER trg_check_date
BEFORE INSERT OR UPDATE ON AB_EMPLOYEE22
FOR EACH ROW
BEGIN

  IF(ROUND((sysdate-nvl(:NEW.DOB,:OLD.DOB))/365) <> nvl(:NEW.AGE,:OLD.AGE))
  THEN
    RAISE_APPLICATION_ERROR( -20001, 'Your Date of Birth and Age do not match');
  END IF;

END;

如果您发现此触发器有任何困难,请随时发表评论。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章