エラー時のメッセージ出力・RAISE EXCEPTION †前回の記事「ターミナルにメッセージ出力」では、levelがEXCEPTIONを除くRAISEのサンプルおよび動作を紹介しました。 RAISEの動作確認 †RAISEの構文について以下に記します。 テスト用テーブルの作成 †CREATE TABLE t1 ( i int ,t text ); EXCEPTIONを除いたRAISEのサンプルおよび実行 †以下のコマンドで、上記のテーブルを作成しました。 $ psql -U sakura sakuradb -f t1.sql CREATE TABLE EXCEPTIONを除いたサンプルソースは以下のようになります。 CREATE OR REPLACE FUNCTION raise1() RETURNS void AS $$ DECLARE foo text := 'foo'; bar int := 123; BEGIN INSERT INTO t1 VALUES(1,'foo'),(2,'bar'),(3,'hoge'); RAISE DEBUG 'DEBUG RAISE MESSAGE'; RAISE LOG 'LOG RAISE MESSAGE'; RAISE INFO 'INFO RAISE MESSAGE %', foo; RAISE NOTICE 'NOTICE RAISE MESSAGE %,%', foo, bar; RAISE WARNING 'WARNING RAISE MESSAGE'; END $$ LANGUAGE plpgsql ; raise1()の登録および実行してみます。
RAISE EXCEPTIONのサンプルおよび実行 †本題となるEXCEPTIONの動作確認を行います。 CREATE OR REPLACE FUNCTION raise_exp() RETURNS void AS $$ DECLARE BEGIN INSERT INTO t1 VALUES(1,'exp_foo'),(2,'exp_bar'),(3,'exp_hoge'); RAISE EXCEPTION 'EXCEPTION RAISE MESSAGE'; END $$ LANGUAGE plpgsql ; 上記の通り、RAISEのレベルにEXCEPTIONを指定しています。
以上の結果の通り、デフォルトであるオートコミット状態でRAISE EXCEPTIONが実行されるとROLLBACKされているのが確認できます。 後作業 †本記事で作成した、raise1(), raise_exp(), t1 をDROPします。 sakuradb=# drop function raise1(); DROP FUNCTION sakuradb=# drop function raise_exp(); DROP FUNCTION sakuradb=# drop table t1; DROP TABLE まとめ †
以上、RAISE EXCEPTION についての記事でした。 |