我尝试创建一个触发器,只允许插入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:表名无效
提前感谢您的帮助。
答案 0 :(得分:0)
就是如何从字段类型日期中提取年份。
dob_year := to_number(to_char(:new.dob,'rrrr'));
但如果你想计算一个年龄,正确的方法是:
age := floor (month_between (sysdate, :new.dob) / 12);