Загрузка данных


CREATE OR REPLACE FUNCTION ourpension.f_process_snv_file_safe(
    p_file_id integer,
    p_username text,
    p_user_id integer
)
RETURNS jsonb
LANGUAGE plpgsql
AS $function$
DECLARE
    v_result jsonb;
    v_sqlstate text;
    v_message text;
    v_detail text;
BEGIN
    BEGIN
        v_result := ourpension.f_process_snv_file(
            p_file_id,
            p_username,
            p_user_id
        );

    EXCEPTION WHEN OTHERS THEN
        -- Все изменения, сделанные внутри этого блока,
        -- уже откачены, включая аннулирование старых справок.
        GET STACKED DIAGNOSTICS
            v_sqlstate = RETURNED_SQLSTATE,
            v_message = MESSAGE_TEXT,
            v_detail = PG_EXCEPTION_DETAIL;

        RETURN jsonb_build_object(
            'success', false,
            'file_id', p_file_id,
            'registered_count', 0,
            'sqlstate', v_sqlstate,
            'message', v_message,
            'detail', NULLIF(v_detail, '')
        );
    END;

    RETURN v_result;
END;
$function$;