我在(Trig 1)下面创建了一个触发器,以便在插入到employee表中之前触发。然后,此触发器将调用过程(Proc 1),该过程将验证生日是否早于当前日期。如果没有继续插入,但如果日期早于当前日期,则会显示类似“无效的生日”的消息。 (触发1)
create or replace trigger VALIDATE_BDAY_TRIG
before insert on employee
for each row
declare
birth_date date;
employee_birthdate date;
begin
birth_date := employee_birthdate;
val_bday_proc birth_date;
end VALIDATE_BDAY_TRIG;
(过程1)
create or replace procedure val_bday_proc(
date_of_birth in date)
as
begin
if date_of_birth > current_date()
then raise_application_error(-20000, 'Employee birth date should not be earlier than the current date');
end;
答案 0 :(得分:4)
在调用存储过程时,应在括号之间传递变量:
val_bday_proc(birth_date)
此外,您还需要获取要插入的实际值,因为现在employee_birthdate
只是一个变量,将是null
。您可以使用:new.fieldname
来获取新记录的字段“ fieldname”的值。完全不需要声明变量,因此假设该字段称为employee_birthdate
:
Create or Replace trigger VALIDATE_BDAY_TRIG
before insert on employee
for each row
begin
val_bday_proc(:new.employee_birthdate);
end VALIDATE_BDAY_TRIG;
存储过程似乎还可以,只是缺少end if;
来关闭if语句。
一些注意事项:
before insert or update
)。