-- chk.chk_check_update: полное обновление проверки по id (read-modify-write, db-m-8). -- На основе: новая. -- Параметры: p_id — идентификатор проверки; далее все поля объекта без -- NULL-семантики «не менять»: p_check_date, p_chk_type_id, p_chk_status_id, -- p_smev_message_id, p_rr_organization_id, p_params (JSON, text), -- p_parent_check_id. -- Возвращает: int — число строк, найденных по id и записанных (db-m-3). CREATE OR REPLACE FUNCTION chk.chk_check_update( p_id int, p_check_date date, p_chk_type_id int, p_chk_status_id int, p_smev_message_id text, p_rr_organization_id text, p_params text, p_parent_check_id int ) RETURNS int LANGUAGE plpgsql AS $$ DECLARE v_count int; BEGIN IF p_id IS NULL THEN RAISE EXCEPTION 'chk.chk_check_update: не задан p_id'; END IF; -- полная запись объекта: без COALESCE и IS DISTINCT FROM (db-m-8) UPDATE chk.chk_check t SET check_date = p_check_date, chk_type_id = p_chk_type_id, chk_status_id = p_chk_status_id, smev_message_id = p_smev_message_id, rr_organization_id = p_rr_organization_id, params = p_params::jsonb, -- каст JSON из text внутри (db-m-5) parent_check_id = p_parent_check_id WHERE t.id = p_id; GET DIAGNOSTICS v_count = ROW_COUNT; RETURN v_count; END; $$;