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$;