我想确保新员工的年龄超过18岁,所以我想这样做的方法是使用一个触发器,从当前日期中减去员工的出生日期。
这是我的table
CREATE TABLE STAFF (
Staff_ID NUMBER(5),
First_Name VARCHAR2(25) NOT NULL,
Last_Name VARCHAR2(25),
Date_Of_Birth DATE NOT NULL,
Gender VARCHAR2(25),
Email VARCHAR2(25),
Telephone NUMBER(15),
Department VARCHAR2(25),
Staff_Type VARCHAR2(25),
Occupation VARCHAR2(25),
Hire_Date DATE,
Salary NUMBER (10)
);
这是我的插入声明;
INSERT INTO STAFF VALUES (1,'Ukeme', 'Mfon', TO_DATE('1980-12-2', 'yyyy-mm-dd'), 'Male', 'mfonclals@gmail.com',7826768732, 'Medical Team','Full-time','Nurse', TO_DATE('2023-02-12', 'yyyy-mm-dd'), 40000, 1);
这是我的触发器
create or replace trigger dob_check
before insert on Staff
for each row
declare
minimum_age number := 18;
begin
if extract(year from (sysdate - :old.Date_Of_Birth) year to month) < minimum_age
then
raise_application_error (-20000, 'Minimum age is '||minimum_age);
end if;
end;
/
1条答案
按热度按时间c3frrgcw1#
在将行插入
staff
表之前检查age时,这里没有:old
值,只有:new
。这就是为什么你的扳机什么也没做。简化:
参见第7行,其中引用了
:new.date_of_birth
:测试: