Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 插入后触发器不工作? 创建或更换触发器螺柱 插入错误后 每行 开始 如果(年龄_Database_Oracle_Triggers - Fatal编程技术网

Database 插入后触发器不工作? 创建或更换触发器螺柱 插入错误后 每行 开始 如果(年龄

Database 插入后触发器不工作? 创建或更换触发器螺柱 插入错误后 每行 开始 如果(年龄,database,oracle,triggers,Database,Oracle,Triggers,这是我的触发码。实际上我是DBMS的新手。我犯了个错误 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; 第3行的错误:PLS-00103:在预期以下情况之一时遇到“;”符号: ,*&-+/mod剩余rem 作为 从进入| |多集散装年日_ 1

这是我的触发码。实际上我是DBMS的新手。我犯了个错误

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;
第3行的
错误:PLS-00103:在预期以下情况之一时遇到“;”符号:
,*&-+/mod剩余rem
作为
从进入| |多集散装年日_
1.创建或更换触发器螺柱
2.插入错误后
3.每行
4.开始
5.如果(年龄<0)那么
我是根据我引用的语法写的!怎么了我不知道

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
不是

if(:new.age<0)
不是

if(年龄<0岁)

:new
:old
限定符在
update
触发器中更为相关,因为它们允许您引用数据库中当前的值以及通过update语句输入的新值。
insert
触发器只能访问
:new
值,因为数据库中当前没有行。我承认,我不能100%确定
:新的
限定符在
插入
触发器中是强制性的,但即使不是,我还是建议使用它是一种好的做法,因为它有助于代码更清晰。

除了
中关于
而不是
的错误之外,在
提升.APPLICATION\u ERROR

必须指定值的范围,无论是
old
还是
new
。否则,如果
条件为r
转换为旧值还是新值,Oracle如何知道


Oracle有一个关于将旧作为旧引用和将新作为新引用的条款,这是有原因的。值的状态需要非常清楚,无论是旧值还是新值。因为,只提到
列名而不告诉Oracle是检查旧值还是新值是模糊的。这是需要验证的值

是啊,成功了!你能告诉我为什么需要“:new”吗?它实际上是什么?我已经更新了我的答案,并做了进一步的解释。别忘了,如果你的问题解决了,你可以投票或接受谢谢,帮了大忙!:)
RAISE_APPLICATION_ERROR
RAISE.APPLICATION.ERROR
if (:new.age < 0)
if (age < 0)