如何只允许18岁及以上的学生入学?

时间:2017-09-04 18:13:46

标签: oracle plsql triggers

我尝试创建一个触发器,只允许插入18岁以上学生的详细信息。

表格结构:

create table student(
uidno numeric(6) primary key,
fname varchar(20),
lname varchar(20),
dob date
);

这是我的PL / SQL触发器:

create or replace trigger checkAge
before insert
on student
for each row

declare

curr_year int;
dob_year int;

begin

select extract(year from current_date) into curr_year from dual;
select extract(year from dob) into dob_year from :new where uidno = :new.uidno;

if curr_year - dob_year < 18 then
    raise_application_error(-20098,'Not above 18 years of age');

end if;

end;

/

我一直收到以下错误: 9/1 PL / SQL:忽略SQL语句 9/55 PLS-00049:错误的绑定变量&#39; NEW&#39; 9/60 PL / SQL:ORA-00903:表名无效

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Barbaros说,

就是如何从字段类型日期中提取年份。

dob_year := to_number(to_char(:new.dob,'rrrr'));

但如果你想计算一个年龄,正确的方法是:

age := floor (month_between (sysdate, :new.dob) / 12);