スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ストアードプロシージャのノウハウ。例外編

複数行返すようなストアードプロシージャの時エラーを返したい場合に行で返すのが難しい場合があります。
そこで例外を使います。

DROP TYPE IF EXISTS type_test_get_list_data CASCADE;
CREATE TYPE type_test_get_list_data AS (
id BIGINT
);

CREATE OR REPLACE FUNCTION test_get_list_data(
p_id BIGINT DEFAULT NULL
) RETURNS SETOF type_test_get_list_data AS $FUNCTION$
DECLARE
BEGIN
IF p_id = 1 THEN
RAISE SQLSTATE 'U0001' USING MESSAGE = 'error occerd p_id=%', p_id;
END IF;
END;
$FUNCTION$ LANGUAGE plpgsql;


例外を出すにはRAISEを使います。
SQLSTATEには例外のコードを、MESSAGEには例外のメッセージが設定できます。

例外のコードは5桁の文字列です。先頭の2桁が種類を、残り3桁がエラーの詳細を意味しているそうですが
別にコードは何を使ってもかまわないのですし、受け取る側が解釈するだけなので適当でもいいです。
ですがPostgreSQLが内部で返すエラーコードが詳細に定義されているので
それに被らないコードが望ましいです。
先頭にUの文字を使っているエラーコードは事前に定義されていないので
私はU0001からコードを振っています。

メッセージには入力パラメーターの情報など渡すと確認しやすくなります。
%を使うことで、いくつも変数をメッセージに付与できます。

アプリケーションでは、メッセージをログにはいたり、エラーコードに合わせた
ユーザ向きのメッセージに変換して画面に表示したりしています。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。