插入不工作后触发?

时间:2014-10-30 14:55:29

标签: database oracle triggers

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

我根据我引用的语法写了这个!什么是错的我不知道?

2 个答案:

答案 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的错误之外。

您必须指定值范围,oldnew。否则,Oracle如何知道您的IF条件是否为eferring旧值或新值?

Oracle有一个关于referencing old as old and new as new的条款的原因。值的状态需要非常清楚,无论是旧值还是新值。因为,只提及column name而不告诉Oracle是否检查旧值或新值是模糊的。这是需要验证的值。

相关问题