CREATE OR REPLACE TRIGGER stud
AFTER INSERT ON error
FOR EACH ROW
BEGIN
IF (age < 0) THEN
RAISE.APPLICATION.ERROR(-2000,'No negative');
END IF;
END;
这是我的触发器代码。其实我是DBMS的新手。我收到一个错误!
ERROR at line 3: PLS-00103: Encountered the symbol ";" when expecting one of the following:
, * & - + / at mod remainder rem
as
from into || multiset bulk year DAY_
1. CREATE OR REPLACE TRIGGER stud
2. AFTER INSERT ON error
3. FOR EACH ROW
4. BEGIN
5. IF (age < 0) THEN
我根据我引用的语法写了这个!什么是错的我不知道?
答案 0 :(得分:1)
RAISE_APPLICATION_ERROR
不
RAISE.APPLICATION.ERROR
和
if (:new.age < 0)
不
if (age < 0)
:new
和:old
限定符在update
触发器中更相关,因为它们允许您引用数据库中当前的值以及通过更新声明。 insert
触发器只能访问:new
值,因为数据库中当前没有行。我承认我并非100%确定:new
限定符在insert
触发器中是强制性的,但即使不是,我也建议使用它,因为它可以提供更清晰的代码。
答案 1 :(得分:1)
除了.
中_
而非RAISE.APPLICATION_ERROR
的错误之外。
您必须指定值范围,old
或new
。否则,Oracle如何知道您的IF
条件是否为eferring
旧值或新值?
Oracle有一个关于referencing old as old and new as new
的条款的原因。值的状态需要非常清楚,无论是旧值还是新值。因为,只提及column name
而不告诉Oracle是否检查旧值或新值是模糊的。这是需要验证的值。