触发oracle 16年龄限制

时间:2018-05-14 13:26:32

标签: oracle database-trigger

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岁进入入围表。但是在引发应用程序错误时会出现一些语法错误。一些建议将非常感谢谢谢。 :)

1 个答案:

答案 0 :(得分:1)

行级触发器中不需要来自目标表的select。您只需通过:new记录访问该列的值即可。您所选择的选项还有一个问题,即它会读取整个表,而不仅仅是插入的行。

要引发例外,您只能使用raise_application_errorRAISE关键字仅用于重新抛出异常处理程序中处理的异常。

要检查过去的指定日期是否超过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;