控制触发器在SQL开发编译但不工作



我试图使用一个触发器来检查用户是否可以根据年龄添加到表中。如果出生日期小于13,它应该抛出一个错误。问题是,它编译正确,但不能工作。

Users_table的pk是username。

CREATE OR REPLACE TRIGGER AGECONTROL
BEFORE INSERT ON Users_table
REFERENCING NEW AS NEW 
FOR EACH ROW
BEGIN
IF TRUNC(MONTHS_BETWEEN(SYSDATE,:new.birthdate)/12) < 12 THEN
raise_application_error(-20001, 'Minimal age is 13.');
END IF;
END;

p。我试过使用以下命令:

CREATE OR REPLACE TRIGGER AGECONTROL
BEFORE INSERT ON Users_table
REFERENCING NEW AS NEW 
FOR EACH ROW
DECLARE
birthDateUser DATE;
BEGIN
SELECT u.birthDate INTO birthDateUser FROM Users_table u WHERE :new.username = u.username
IF TRUNC(MONTHS_BETWEEN(SYSDATE,:new.birthdate)/12) < 12 THEN
raise_application_error(-20001, 'Minimal age is 13.');
END IF;
END;

但是由于表User u不存在,抛出错误。

谢谢!

您可以使用:

CREATE OR REPLACE TRIGGER AGECONTROL
BEFORE INSERT ON Users_table
FOR EACH ROW
BEGIN
IF MONTHS_BETWEEN(TRUNC(SYSDATE), :new.birthdate) < 12 * 13
THEN
raise_application_error(-20001, 'Minimal age is 13.');
END IF;
END;
/

db<此处小提琴>

最新更新