Oracle Trigger无法正常工作

时间:2012-06-07 12:07:30

标签: 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 N ');
END IF;
END ONLY_Y_N;

请帮忙

3 个答案:

答案 0 :(得分:4)

适当的方法是检查约束,而不是触发器。

也许是一个NOT NULL约束

答案 1 :(得分:4)

正如David Aldridge所说,你想要一个检查约束而不是触发器。但是,你的触发器不起作用的原因是这个条件:

IF :new.flag <>'Y' OR  :new.flag <>'N' THEN

因为'Y'&lt;&gt; 'N'和'N'&lt;&gt; 'Y'这永远不会是真的!你需要:

IF :new.flag <>'Y' AND  :new.flag <>'N' THEN

或更简洁:

IF :new.flag not in ('Y', 'N') THEN

因此检查约束解决方案将是:

alter table checktable add constraint only_y_n check (flag in ('Y', 'N'));

答案 2 :(得分:1)

简单:您应该AND而不是OR。无论FLAG的值如何,您当前的代码都会引发异常。更好的是,改为使用NOT IN

IF :new.flag NOT IN ('Y', 'N') THEN
    RAISE_APPLICATION_ERROR(-20100, 'Please insert Y  or N ');
END IF;