所以,我正在做这个项目,我添加了以下触发器来检查年龄资格。
create or replace TRIGGER AGEVALIDATION
BEFORE INSERT OR UPDATE ON RECIPIENT
FOR EACH ROW
BEGIN
IF (EXTRACT (YEAR FROM SYSDATE) - EXTRACT (YEAR FROM :NEW.DATE_OF_BIRTH)) < 12 THEN
raise_application_error(-20001,'VACCINE ELIGIBILITY AGE IS 12 AND ABOVE');
end if;
END;
以下触发器可以工作,但需要处理以下错误。我需要处理ORA-06512和ORA-6512。有人能帮我吗?
Error starting at line : 1 in command -
INSERT INTO RECIPIENT(RECIPIENT_ID,FIRST_NAME,LAST_NAME,DATE_OF_BIRTH,CONTACT_NUMBER,STREET_ADDRESS,CITY,ZIPCODE,GENDER)
VALUES(152,'Batman1','adams','23-OCT-2019',6172544372,'234 HUNTINGTON AVE','BOSTON','02115','MALE')
Error report -
ORA-20001: VACCINE ELIGIBILITY AGE IS 12 AND ABOVE
ORA-06512: at "APP_ADMIN.AGEVALIDATION", line 3
ORA-04088: error during execution of trigger 'APP_ADMIN.AGEVALIDATION'
2条答案
按热度按时间omqzjyyz1#
触发器并没有完全按照您的想法运行,因为您可以比较
2022-01-01
和2010-12-31
,2022年和2010年之间的差值为12年,但这两个日期之间的差值仅为11年零1天。您需要使用MONTHS_BETWEEN
来比较整个日期:小提琴
我需要处理ORA-06512和ORA-6512。
触发器无法“处理”这些异常,因为触发器中没有任何内容会生成这些异常。您看到的可能是从用户定义的异常生成的堆栈跟踪的一部分,可以忽略;但是,您的问题中没有包括完整的堆栈跟踪,因此很难确定。
如果确实需要“处理”某些内容,则应该从执行
INSERT
的代码中进行处理,而不是在触发器中。zu0ti5jz2#
您需要捕获的异常是实际引发的-20001。