■ はじめに
ストアドの例外処理について扱う
目次
【1】ストアド の 例外ハンドリング 1)構文 【2】ストアド の 例外スロー 1)構文 【3】カスタム例外を作成する 1)構文 【4】サンプル 例1:Hello world 例2:独自例外
【1】ストアド の 例外ハンドリング
* EXCEPTION句でキャッチする
Snowflake
https://docs.snowflake.com/ja/sql-reference/snowflake-scripting/exception
PostgreSQL
https://www.postgresql.jp/document/12/html/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING
1)構文
BEGIN ... EXCEPTION WHEN <exception_name> [ OR <exception_name> ... ] THEN <statement>; [ WHEN ... ] [ WHEN OTHER THEN ] <statement>; END
【2】ストアド の 例外スロー
* RAISE EXCEPTION でスローする
1)構文
RAISE EXCEPTION '【メッセージ】';
【3】カスタム例外を作成する
* 独自例外を作成するには、RAISE EXCEPTION USINGを使う
1)構文
RAISE EXCEPTION USING ERRCODE='【Error Code】', MESSAGE='【Error Message】', HINT='【Error Hint】';
PostgreSQ
https://www.postgresql.jp/document/8.4/html/errcodes-appendix.html
【4】サンプル
SQL Fiddle
https://www.db-fiddle.com/
例1:Hello world
CREATE OR REPLACE PROCEDURE demo_stored_procedure(arg1 INT) LANGUAGE plpgsql AS $$ DECLARE value1 INT := arg1; BEGIN IF value1 > 5 THEN RAISE EXCEPTION 'Error occurred' ; END IF; EXCEPTION WHEN OTHERS THEN RAISE INFO 'Error SQLERRM: %', SQLERRM; RAISE INFO 'Error SQLSTATE: %', SQLSTATE; -- Re-throw error RAISE EXCEPTION '[ERROR] Error: %...', SQLERRM; END $$ -- 呼び出し -- 通常 CALL demo_stored_procedure(1); -- エラー発生 CALL demo_stored_procedure(6); -- Query Error: [ERROR] Error: Error occurred...
例2:独自例外
CREATE OR REPLACE PROCEDURE demo_stored_procedure(arg1 INT) LANGUAGE plpgsql AS $$ DECLARE value1 INT := arg1; BEGIN IF value1 > 5 THEN RAISE EXCEPTION USING ERRCODE='XX999', MESSAGE='This is a sample exception', HINT='This is a hint'; END IF; EXCEPTION WHEN SQLSTATE 'XX999' then RAISE INFO 'SQLSTATE = %', SQLSTATE; RAISE INFO 'SQLERRM = %', SQLERRM; -- Re-throw error RAISE EXCEPTION '[ERROR] Error: %!!!!?', SQLERRM; WHEN OTHERS THEN RAISE INFO 'Error SQLERRM: %', SQLERRM; RAISE INFO 'Error SQLSTATE: %', SQLSTATE; -- Re-throw error RAISE EXCEPTION '[ERROR] Error: %...', SQLERRM; END $$ -- 呼び出し -- 通常 CALL demo_stored_procedure(1); -- エラー発生 CALL demo_stored_procedure(10); -- Query Error: [ERROR] Error: This is a sample exception!!!!?
参考文献
https://qiita.com/kudojp/items/3115467ba6a61b0fe1f5
https://atmarkit.itmedia.co.jp/ait/articles/1909/18/news008.html
https://qiita.com/ebichan_88/items/1effb09fbc458276ea51
関連記事
ストアド ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2010/08/06/112528
ストアド ~ 基本編 / 変数 ~
https://dk521123.hatenablog.com/entry/2013/01/25/002936
ストアド ~ 基本編 / 繰り返し ~
https://dk521123.hatenablog.com/entry/2012/06/22/213026
ストアド ~ 基本編 / 条件分岐 ~
https://dk521123.hatenablog.com/entry/2024/11/12/005529
【PostgreSQL】ストアド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/04/21/000100
【PostgreSQL】ストアド ~ SELECT INTO ~
https://dk521123.hatenablog.com/entry/2024/11/11/212756
SQL ~ 関係演算 / 集合論 ~
https://dk521123.hatenablog.com/entry/2023/01/16/000000