触发oracle 16年龄限制
trigger oracle 16 age limit
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岁入场table。但是在引发应用程序错误时存在一些语法错误。一些建议将不胜感激谢谢。 :)
不需要在行级别触发器中从目标 table select
。您可以简单地通过 :new
记录访问列的值。如图所示,您的 select 还有一个问题,即它会读取整个 table,而不仅仅是插入的行。
要引发异常,您只需使用 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;
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岁入场table。但是在引发应用程序错误时存在一些语法错误。一些建议将不胜感激谢谢。 :)
不需要在行级别触发器中从目标 table select
。您可以简单地通过 :new
记录访问列的值。如图所示,您的 select 还有一个问题,即它会读取整个 table,而不仅仅是插入的行。
要引发异常,您只需使用 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;