CREATE OR REPLACE TRIGGER PREVENT16YRS
BEFORE INSERT OR UPDATE OF compno ON entry
FOR EACH ROW
BEGIN
SELECT compdob
from competitor
where (2018 - EXTRACT(compdob) < 16);
raise raise_application_error( -20001, 'This is a custom error' );
END;
想限制16岁进入入围表。但是在引发应用程序错误时会出现一些语法错误。一些建议将非常感谢谢谢。 :)
答案 0 :(得分:1)
行级触发器中不需要来自目标表的select
。您只需通过:new
记录访问该列的值即可。您所选择的选项还有一个问题,即它会读取整个表,而不仅仅是插入的行。
要引发例外,您只能使用raise_application_error
。 RAISE
关键字仅用于重新抛出异常处理程序中处理的异常。
要检查过去的指定日期是否超过16年,您可以使用months_between()
:
CREATE OR REPLACE TRIGGER PREVENT16YRS
BEFORE INSERT OR UPDATE OF compno ON entry
FOR EACH ROW
BEGIN
if months_between(current_date, :new.compdob) < 16 * 12 then
raise_application_error( -20001, 'Too young!' );
end;
END;