Ins*_*ion 0 sql triggers plsql
我试图在插入表之前编写一个触发器.
它检查特定值,如果它无效,它将引发异常
CREATE OR REPLACE TRIGGER insert_birthdate
BEFORE INSERT ON student
DECLARE
invalid_date EXCEPTION ;
BEGIN
IF(NEW.birthdate >= sysdate - interval '16' year )
THEN RAISE invalid_date ;
END IF ;
EXCEPTION
WHEN invalid_date THEN
RAISE_APPLICATION_ERROR(-20500, 'AGE MUST BE GREATER THAN 16 !!');
END;
/
Run Code Online (Sandbox Code Playgroud)
这是行不通的.
这个输出,有什么帮助吗?
Warning: Trigger created with compilation errors.
SQL>
SQL> show errors
Errors for TRIGGER INSERT_BIRTHDATE:
LINE/COL ERROR
-------- ----------------------------------------------------------
4/2 PL/SQL: Statement ignored
4/8 PLS-00201: identifier 'NEW.BIRTHDATE' must be declared
SQL>
Run Code Online (Sandbox Code Playgroud)
替换此行
IF(NEW.birthdate >= sysdate - interval '16' year )
Run Code Online (Sandbox Code Playgroud)
同
IF(:NEW.birthdate >= sysdate - interval '16' year )
Run Code Online (Sandbox Code Playgroud)
此外,您需要为每一行而不是整个语句执行before触发器.
来自Docs,
在BEFORE语句触发器中,触发器主体无法读取:NEW或:OLD.(在BEFORE行触发器中,触发器主体可以读取和写入:OLD和:NEW字段.)
就像这样
CREATE OR REPLACE TRIGGER orders_before_insert
BEFORE INSERT
ON student
FOR EACH ROW
Run Code Online (Sandbox Code Playgroud)