2

フィールドの値が「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;

助けてください

4

3 に答える 3

4

これに適した方法は、トリガーではなくチェック制約です。

多分 NOT NULL 制約も

于 2012-06-07T12:11:14.550 に答える
4

David Aldridge が言うように、トリガーではなくチェック制約が必要です。ただし、トリガーが機能しない理由は次の条件です。

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

'Y' <> 'N' および 'N' <> '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'));
于 2012-06-07T12:15:06.567 に答える
1

シンプル:ANDの代わりにOR. の値に関係なく、現在のコードは例外を発生させますFLAGNOT INさらに良いことに、代わりに次を使用します。

IF :new.flag NOT IN ('Y', 'N') THEN
    RAISE_APPLICATION_ERROR(-20100, 'Please insert Y  or N ');
END IF;
于 2012-06-07T12:15:43.060 に答える