19

私はまだPL/SQLの初心者なので、次のトリガーをコピーして貼り付けています。

CREATE OR REPLACE TRIGGER FOO_TRG1
    BEFORE INSERT
    ON FOO
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
BEGIN
    IF :NEW.FOO_ID IS NULL THEN
        SELECT FOO_SEQ1.NEXTVAL INTO :NEW.FOO_ID FROM DUAL;
    END IF;

    EXCEPTION
        WHEN OTHERS THEN RAISE;
END FOO_TRG1;
/
ALTER TRIGGER FOO_TRG1 ENABLE;

含まれている例外処理コードはまったく何もせず、単に削除される可能性があるのではないかと思います。何か問題が発生した場合はとにかくエラー メッセージが表示されるからです。私は正しいですか?

(そのようなコードは、以前のコードをさらに編集した結果だと思います。)

4

3 に答える 3

0

それはまったく何もしないだけでなく、犯罪に近づいています。基本的には、「冗談で、実際の行ではなく、この行でエラーが発生したふりをするつもりです」と言っています。

例外処理は、言語全体で最も誤解されている側面です。上記は非常に一般的であり、「ハンドルされていない例外」は悪いことであるという基本的な誤解から生じていると思います (ほとんど疑問が生じます-なぜ処理しなかったのですか?)。オラクルだけが「例外が発生した」または「例外が発生した」という用語を使用した場合、このコードをサポートする必要がある私たち貧しい人々は、「その他の場合」の例外ハンドラーがはるかに少なくなり、私たちの生活を悲惨なものにしていたでしょう.

于 2016-01-27T12:54:15.737 に答える
0

@DazzLが指摘しているように、エラー行をマスクする以外は何もしません。ただし、上記のコードは処理が必要な例外を発生させる可能性がありますが、処理は未定義のままであることを思い出してください。

他のプログラミング言語では、try/catch ブロックを自動的に作成でき (Eclipse/Java、Netbeans/PHP、または Visual Studio/C# など)、デフォルトの動作が throw である catch ("when other" など) で作成されます。再び例外が発生し、プログラマーは例外が発生したときに何をすべきかを決定します。

于 2019-01-28T14:30:03.943 に答える