Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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/3/html/84.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
Oracle触发器不工作_Oracle_Plsql - Fatal编程技术网

Oracle触发器不工作

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

我需要开发一个触发器,当字段的值不是“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 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;