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
但是此查询不起作用。请帮我
您不能在检查约束中使用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] 删除。
我来说两句