创建一个触发器

时间:2015-05-12 09:55:35

标签: sql oracle11g triggers

创建一个名为NewEntry的触发器,如果​​该结果小于零,则不允许将结果插入到学生考试表中。如果结果小于零,则在查询中显示合适的消息,并提供代码以测试触发器。

这就是我所做的,但我一直在

  

警告:使用编译错误创建了trrigger。

这是我的代码,请帮忙!

CREATE OR REPLACE TRIGGER NewEntry 
AFTER INSERT OR UPDATE ON Assignment2.Student_Exam 
FOR EACH ROW
DECLARE
Results NUMBER;
BEGIN
IF(:NEW.Results < '0')
THEN
RAISE_APPLICATION_ERROR
(-20700,'Student's result cannot be less-than ZERO..Enter valid Results':);
ENDIF;
END;
 /

3 个答案:

答案 0 :(得分:0)

结束如果,不是ENDIF。同样如上面提到的Jeremy C,你需要在BEFORE INSERT OR UPDATE

之前创建触发器

答案 1 :(得分:0)

有两个错误:首先是'END IF'而不是ENDIF,其次你的消息中有撇号。

正确的代码是:

CREATE OR REPLACE TRIGGER NewEntry 
AFTER INSERT OR UPDATE ON Assignment2.Student_Exam 
FOR EACH ROW
DECLARE
Results NUMBER;
BEGIN
IF(:NEW.Results < '0')
THEN
RAISE_APPLICATION_ERROR
(-20700, 'students result cannot be less-than ZERO..Enter valid Results:');
END IF;
END;
 /

正如其他人所说,你可以通过输入show errors来自行解决这个问题。这会给你答案,例如

SQL> show errors;
Errors for TRIGGER NEWENTRY:

LINE/COL ERROR
-------------------------------------------------------------------------
7/18     PLS-00103: Encountered the symbol "S" when expecting one of the
following:
) , * & = - + < / > at in is mod remainder not rem =>
<an exponent (**)> <> or != or ~= >= <= <> and or like like2
like4 likec between || multiset member submultiset

编辑:回复Ersin - 如果是New.Results那么你会得到一个绑定错误,例如。

SQL> show errors;
Errors for TRIGGER NEWENTRY:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/4      PLS-00049: bad bind variable 'NEW.RESULTS'
SQL>

这将是'结果'不是Student_Exam中的一个列的结果,我认为在该声明的其余部分确实存在。

答案 2 :(得分:0)

你还要听其他答案,还有一件事,

你必须专注于:NEW.Results 这就是事情。