Oracle触发器不工作
我需要开发一个触发器,当字段的值不是“Y”或“N”时触发。下面是我的代码,它不工作Oracle触发器不工作,oracle,plsql,Oracle,Plsql,我需要开发一个触发器,当字段的值不是“Y”或“N”时触发。下面是我的代码,它不工作 CREATE OR REPLACE TRIGGER ONLY_Y_N BEFORE INSERT OR UPDATE OF flag ON checktable FOR EACH ROW BEGIN IF :new.flag <>'Y' OR :new.flag <>'N' THEN RAISE_APPLICATION_ERROR(-20100, 'Please insert Y or
CREATE OR REPLACE TRIGGER ONLY_Y_N
BEFORE INSERT OR UPDATE OF flag
ON checktable
FOR EACH ROW
BEGIN
IF :new.flag <>'Y' OR :new.flag <>'N' THEN
RAISE_APPLICATION_ERROR(-20100, 'Please insert Y or N ');
END IF;
END ONLY_Y_N;
仅创建或替换触发器
在插入或更新标志之前
在支票台上
每行
开始
如果:new.flag“Y”或:new.flag“N”,则
提出申请错误(-20100,“请插入Y或N”);
如果结束;
仅限结束;
请帮助解决此问题的适当方法是检查约束,而不是触发器
可能还有一个非空约束正如David Aldridge所说,您需要的是检查约束而不是触发器。但是,触发器不工作的原因是:
IF :new.flag <>'Y' OR :new.flag <>'N' THEN
因此,检查约束解决方案将是:
alter table checktable add constraint only_y_n check (flag in ('Y', 'N'));
简单:你应该有
和
,而不是或
。无论标志的值是多少,当前代码都会引发异常。更好的方法是,使用而不是在中:
IF :new.flag NOT IN ('Y', 'N') THEN
RAISE_APPLICATION_ERROR(-20100, 'Please insert Y or N ');
END IF;
alter table checktable add constraint only_y_n check (flag in ('Y', 'N'));
IF :new.flag NOT IN ('Y', 'N') THEN
RAISE_APPLICATION_ERROR(-20100, 'Please insert Y or N ');
END IF;