MT.Checks/DB/chk/functions/chk_check_update.sql

41 lines
1.6 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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