41 lines
1.6 KiB
PL/PgSQL
41 lines
1.6 KiB
PL/PgSQL
-- 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;
|
||
$$;
|