4

私は、常にデフォルトの例外ハンドラーを持ち、スローされた例外に関数名を追加して再度スローする方法で PostgreSQL 関数を作成する傾向があります。

例:

BEGIN
    RAISE exception SQLSTATE '77777' using message = 'Test exception';
EXCEPTION
    WHEN others THEN
        raise exception 
        using message = 'error_handling_test: ' || sqlstate
        || '/' || sqlerrm;
END;

この場合、SQLSTATE 77777 はそれ以上伝播されず、後でキャッチした例外にはデフォルトの SQLSTATE P0001 があります。

例外ハンドラの昇格にも SQLSTATE を追加することは可能ですが、これはハードコードされた文字列に限定されるようです。私が取得したいのは、次のようなものです。

DECLARE
    err_code varchar;
BEGIN
    RAISE exception SQLSTATE '77777' using message = 'Test exception';
EXCEPTION
    WHEN others THEN

        err_code:=sqlstate;

        raise exception sqlstate err_code
        using message = 'error_handling_test: ' || sqlstate
        || '/' || sqlerrm;
END;

これはコンパイルされません。

4

1 に答える 1