始める無料で始める

名前付き関数の作成と変数の宣言

強力なデバッグ関数の動きを見たところで、今度は自分で作ってみましょう。まず、関数名・パラメータ・戻り値の型を含む関数シグネチャを定義します。そのあとは、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);')
コードを編集して実行