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

OracleデータベースでRAISE_APPLICATION_ERRORメソッドを使用してユーザー定義の例外を宣言する

    PL / SQL例外処理の概要で説明したように、Oracle PL/SQLでユーザー定義の例外を宣言する方法は3つあります。これらの3つのうち、前のチュートリアルで最初の方法についてすでに説明し、学習しました。今日このブログでは、一歩先を進んで、ユーザー定義の例外を宣言する2番目の方法を確認し、RAISE_APPLICATION_ERRORメソッドを使用してユーザー定義の例外を宣言する方法を学びます。

    RAISE_APPLICATION_ERRORメソッドとは何ですか?

    RAISE APPLICATION ERRORは、Oracleソフトウェアに組み込まれているストアドプロシージャです。この手順を使用すると、エラー番号をカスタムエラーメッセージに関連付けることができます。エラー番号とカスタムエラーメッセージの両方を組み合わせることで、エラーが発生したときにOracleエンジンによって表示されるデフォルトのエラー文字列に似たエラー文字列を作成できます。

    RAISE_APPLICATION_ERRORプロシージャを使用して生成できるエラーの数は?

    RAISE_APPLICATION_ERRORプロシージャを使用すると、エラーに-20,000から-20,999までの番号を付けることができるため、RAISE_APPLICATION_ERRORプロシージャを使用すると、1000個のエラーを生成できると言えます。

    Raise_application_errorはどのパッケージの一部ですか?

    RAISE_APPLICATION_ERRORプロシージャは、DBMS_STANDARDパッケージ内にあります。

    Raise_Application_Errorの構文

    raise_application_error (error_number, message [, {TRUE | FALSE}]);

    ここで、error_numberは-20000 .. -20999の範囲の負の整数であり、メッセージは最大2048バイトの文字列です。オプションの3番目のパラメータがTRUEの場合、エラーは以前のすべてのエラーの山に置かれます。ただし、FALSE(デフォルト)パラメータの場合、エラーは以前のすべてのエラーを置き換えます。 RAISE_APPLICATION_ERRORはパッケージDBMS_STANDARDの一部であり、パッケージSTANDARDへの参照を修飾する必要はありません。

    RAISE_APPLICATION_ERRORプロシージャの例

    次の例では、ユーザーから数値データ型を入力し、それが18以上であるかどうかを確認します。そうでない場合は、宣言するユーザー定義エラーが発生します。そうでない場合は、プログラムの通常の実行フローが発生します。

    ステップ1:サーバー出力をオンに設定します

    PL / SQLプログラムによって返される結果をデフォルトの出力画面で確認したい場合は、サーバー出力を「オン」に設定する必要があります。これは、セッションではデフォルトで「オフ」に設定されています。

    SET SERVEROUTPUT ON;

    ステップ2:ユーザー入力を取得する

    前回のチュートリアルで行ったようにコードの値を固定することはできますが、それほど楽しいことではありません。コードをより動的にするために、今回は、カスタマイズされたメッセージが印刷されたポップアップボックスに値を入力できるようにすることで、ユーザーによる入力を受け入れることにしました。

    Oracle PL / SQLのACCEPTコマンドを使用して、カスタマイズされたメッセージが印刷されたポップアップ・ボックスを使用して入力を受け取ることができます。

    ACCEPT var_age NUMBER PROMPT 'What is your age?';

    コマンドは、キーワードacceptで始まり、その後に変数の名前とそのデータ型が続きます。この場合、名前はvar_ageで、データ型はNUMBERです。それがステートメントの前半です。この部分は、入力値を保存するのに役立ちます。ステートメントの残りの半分は、ポップアップボックスにカスタマイズされたメッセージを印刷する役割を果たします。変数のデータ型の直後にあるキーワードPROMPTを使用して、ポップアップボックスに出力する任意の文字列を指定できます。この場合、このカスタマイズされたメッセージは「あなたの年齢は何歳ですか?」

    になります。

    ACCEPTコマンドを詳細に説明する広範なチュートリアルを実行したい場合は、ハッシュタグ#RebellionRiderを使用してこのブログを共有してください。ツイッター@RebellionRiderで私に手紙を書くこともできます。

    ステップ3:変数を宣言する

    DECLARE
      age   NUMBER := &var_age;
    

    スコープの制限により、acceptコマンドで使用した変数に格納されている値を使用することはできません。これは、その値をPL/SQLプログラムに直接使用できないことを意味します。この問題は、変数var_ageに格納された値をPL/SQLブロックのローカル変数に割り当てることで解決できます。これは、上記のコードセグメントで行ったこととまったく同じです。

    上記のコードセグメントでは、「age」という名前のローカル変数を宣言し、代入演算子を使用して変数var_ageに格納されている値を割り当てました。

    ステップ4:RAISE_APPLICATION_ERRORプロシージャを使用して、ユーザー定義の例外を宣言します

    BEGIN
      IF age < 18 THEN
       RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!');
      END IF;
    

    このコードセグメントでは、RAISE_APPLICATION_ERRORプロシージャを使用してユーザー定義の例外を宣言しました。このプロシージャは、2つのパラメータを使用して呼び出されます。最初のパラメータは負の数で、私の場合は-20008で、2番目の数は同じエラーが発生した場合に表示される文字列です。

    問題は、このエラーがいつ発生するかということです。

    ご覧のとおり、コードはIF-THEN条件付き制御ブロック内に含まれています。これにより、ユーザーの年齢が18歳未満の場合にのみエラーが発生します。

    ステップ5:実行可能ステートメント

    DBMS_OUTPUT.PUT_LINE('Sure, What would you like to have?');

    実行可能ステートメントとは、エラーがなく、プログラムが通常の実行フローである場合にコンパイルおよび実行されるステートメントです。コードを単純で理解しやすいものにするために、DBMSOUTPUTステートメントである単一のステートメントを記述しました。

    ステップ6:例外ハンドラーを作成する

    ユーザー定義の例外を宣言して発生させたので、次にその例外ハンドラーを作成する必要があります。前のPL/SQLチュートリアルで述べたように、「例外ハンドラ」セクションで、発生したエラーがトリガーされたときに何が起こるかを指定します。

    EXCEPTION WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
    END;
    /
    

    この例外処理セクションでは、DBMSOUTPUTステートメントを使用してSQLERRM関数を呼​​び出しました。これは、最後に発生した例外のエラーメッセージを取得するOracleが提供するユーティリティ関数です。

    これらすべての小さなコードを1つの大きなプログラムにまとめましょう。

    Raise_Application_Errorプロシージャを使用したユーザー定義の例外

    SET SERVEROUTPUT ON;
    ACCEPT var_age NUMBER PROMPT 'What is yor age';
    DECLARE
      age   NUMBER := &var_age;
    BEGIN
      IF age < 18 THEN
        RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!');
      END IF; 
      DBMS_OUTPUT.PUT_LINE ('Sure, What would you like to have?'); 
      EXCEPTION WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE (SQLERRM);
    END;
    / 
    

    これは、Oracle DatabaseでRaise_Application_Errorプロシージャを使用してユーザー定義の例外を宣言する方法についての、短くて説明的なチュートリアルです。あなたが何か新しいことを学び、読書を楽しんだことを願っています。ソーシャルメディアでこのブログを共有することで、他の人の学習を支援したり、私と私のチャンネルの成長を支援したりできます。ありがとう&素晴らしい一日を!


    1. MariaDBでのDATEDIFF()のしくみ

    2. Oracleでタイムゾーンを変更する4つの方法

    3. MySQLとPostgreSQLのデッドロックを理解する

    4. MariaDBでのMONTH()のしくみ