エラーとメッセージ

PostgreSQL 9.0.0文書
前のページ | 巻戻し | 第 39章PL/pgSQL - SQL手続き言語 | 早送り | 次のページ

# 39.8. エラーとメッセージ

`RAISE`文を使用してメッセージを報告し、エラーを発生することができます。

    RAISE [ level ] 'format' [, expression [, ... ]] [ USING option = expression [, ... ] ];
    RAISE [ level ] condition_name [ USING option = expression [, ... ] ];
    RAISE [ level ] SQLSTATE 'sqlstate' [ USING option = expression [, ... ] ];
    RAISE [ level ] USING option = expression [, ... ];
    RAISE ;

`level`オプションはエラーの深刻度を指定します。 使用可能なレベルは`DEBUG`、`LOG`、`INFO`、`NOTICE`、`WARNING`および`EXCEPTION`で、`EXCEPTION`がデフォルトです。 `EXCEPTION`はエラーを発生させ、現在のトランザクションをアボートします。 他のレベルは異なる優先度レベルのメッセージを生成するだけです。 特定の優先度のエラーメッセージがクライアントに報告するか、サーバログに書き込むか、またはその両方はlog_min_messagesおよびclient_min_messages設定変数によって制御されます。 詳細については、第18章を参照してください。

もしあれば`level`の後に`format`を記述することができます （これは評価式ではなく、単純文字列リテラルでなければなりません）。 書式文字列は報告されるエラーメッセージテキストを指定します。 書式文字列内では、`%`は次の省略可能な引数の値の文字列表現で書き換えられます。 `%%`と記述することで`%`リテラルを表すことができます。

以下の例では、`v_job_id`の値は文字列内の`%`を置き換えます。

    RAISE NOTICE 'Calling cs_create_job(%)', v_job_id;

`USING`に続いて、`option` = `expression`項目を記載することで、エラー報告に追加の情報を加えることができます。 使用可能な`option`キーワードは`MESSAGE`、`DETAIL`、`HINT`、および`ERRCODE`で、それぞれの`expression`は任意の文字列で値付けされる式を取ることができます。 `MESSAGE`はエラーメッセージテキストを設定します （このオプションは`USING`の前に書式文字列を含む`RAISE`形式では使用できません）。 `DETAIL`はエラー詳細メッセージを、一方`HINT`はヒントを出力します。 `ERRCODE`は、付録Aで示されている状況名、または直接的に５文字によるSQLSTATEコードのいずれかの報告すべきエラーコード（SQLSTATE）を指定します。

以下の例は、与えられたエラーメッセージとヒントを付けてトランザクションをアボートします。

    RAISE EXCEPTION 'Nonexistent ID --> %', user_id
          USING HINT = 'Please check your user id';

以下の２つの例は、SQLSTATEを設定する等価な方法を示しています。

    RAISE 'Duplicate user ID: %', user_id USING ERRCODE = 'unique_violation';
    RAISE 'Duplicate user ID: %', user_id USING ERRCODE = '23505';

主引数が報告されるべき状況名、またはSQLSTATEである場合、２番目の`RAISE`構文があります。 例を示します。

    RAISE division_by_zero;
    RAISE SQLSTATE '22012';

この構文において、`USING`は独自のエラーメッセージ、詳細、またはヒントを供給するように使用できます。 先の例と同じことを行う別の方法は次のようになります。

    RAISE unique_violation USING MESSAGE = 'Duplicate user ID: ' || user_id;

他にも亜種があり、`RAISE USING` または `RAISE `level` USING`と記述して、全て一括して`USING`リスト内に書き加えます。

最後の`RAISE`亜種はパラメータを全く取りません。 この形式は`BEGIN`ブロックの`EXCEPTION`句で使用されるのみです。 これは、現在処理中のエラーを上位ブロックに再発生させます。

`RAISE EXCEPTION`コマンド内で状況名もSQLSTATEも指定されない場合、デフォルトは`RAISE_EXCEPTION` (`P0001`)を使用します。 メッセージテキストが指定されない場合、デフォルトは状況名、またはSQLSTATEをメッセージテキストとして使用します。

> 注意: SQLSTATEコードでエラーコードを指定する場合、事前に定義されたエラーコードに制約されることはありません。 `00000`以外の５桁の数字かASCIIの大文字からなるどんなエラーコードも選択できます。 ３つのゼロで終わるエラーコードの出力を避けるように推奨されています。 と言うのは、そこには分類コードがあり、それらは全ての分類から捕捉することによってのみ補足可能だからです。

前のページ | ホーム | 次のページ
カーソル | 上に戻る | トリガプロシージャ