sql >> データベース >  >> RDS >> Oracle

トリガー内で例外を発生させる方法は?これを行う方法はありますか?

    もうすぐです。何かを宣言したい場合は、トリガーにDECLAREブロックが必要です。これは、WHEN句が間違った場所にあることを意味します。

    create or replace trigger trig1
     before update
     of sal
     on emp
     for each row
     when (new.sal < old.sal)
    
    declare    
       user_xcep EXCEPTION;
       PRAGMA EXCEPTION_INIT( user_xcep, -20001 );
    begin
       raise user_xcep;
    end;
    

    SQLフィドル

    いくつかのポイント:

    1. 決して 例外をキャッチしてから、DBMS_OUTPUT.PUT_LINEを呼び出します。それは無意味です。すべてのレコードの結果を表示するには、誰かがそこにいる必要があります。何かが発生したくない場合は、例外を発生させてからキャッチします。例外にエラーコードを追加して、トリガーの外でこれをキャッチし、希望どおりに処理できるようにしました(stdoutに何も出力しないでください)。
    2. これはマイナーなポイントですが、少し空白を追加しました。あまりない。コードがなかったため、最初はコードのどこに問題があるのか​​わかりませんでした。
    3. 例外宣言とRAISEの後、セミコロンがありませんでした。

    ドキュメントで内部的に定義された例外の詳細を読む




    1. データセットをディープコピーし、すべてのコピーを指すようにFK参照を変更するにはどうすればよいですか?

    2. SQLServer2016でのServiceBrokerの機能強化

    3. DockerでのMariaDBMaxScaleロードバランシング:デプロイメント:パート1

    4. IN演算子に動的に値を渡す方法は?