名前付き関数の作成と変数の宣言
強力なデバッグ関数の動きを見たところで、今度は自分で作ってみましょう。まず、関数名・パラメータ・戻り値の型を含む関数シグネチャを定義します。そのあとは、DO 関数と同じ流れです。
この演習はコースの一部です
PostgreSQL におけるトランザクションとエラー処理
演習の手順
sql_stmtとして SQL 文を受け取るdebug_statementという名前の関数を定義します。- 関数の戻り値の型は
BOOLEANにします。 - 渡された SQL 文を実行して、発生した例外を捕捉します。
- デバッグが発火した場合は
True、発火しなかった場合はFalseを返します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
-- Define our function signature
___ ___ ___ ___ debug_statement(
sql_stmt TEXT
)
-- Declare our return type
___ ___ AS $$
DECLARE
exc_state TEXT;
exc_msg TEXT;
exc_detail TEXT;
exc_context TEXT;
BEGIN
BEGIN
-- Execute the statement passed in
___ sql_stmt;
EXCEPTION WHEN others THEN
GET STACKED DIAGNOSTICS
exc_state = RETURNED_SQLSTATE,
exc_msg = MESSAGE_TEXT,
exc_detail = PG_EXCEPTION_DETAIL,
exc_context = PG_EXCEPTION_CONTEXT;
INSERT into errors (msg, state, detail, context) values (exc_msg, exc_state, exc_detail, exc_context);
-- Return True to indicate the statement was debugged
___ ___;
END;
-- Return False to indicate the statement was not debugged
RETURN ___;
END;
$$ LANGUAGE plpgsql;
SELECT debug_statement('INSERT INTO patients (a1c, glucose, fasting) values (20, 89, TRUE);')