aonestar
.public
Tables
(current)
Columns
Constraints
Relationships
Orphan Tables
Anomalies
Routines
sp_guest_merge_many
Description
Collapse several guest profiles into one destination. All-or-nothing: raises on the first failure.
Parameters
Name
Type
Mode
i_src_guest_ids
int4[]
IN
i_des_guest_id
integer
IN
Definition
DECLARE v_given integer; v_srcs integer[]; v_src integer; BEGIN PERFORM sp_raise_error_if(i_des_guest_id IS NULL, 'Please specify destination guest to merge'); -- นับ id ที่ส่งมาจริง (ไม่นับ NULL) เพื่อแยก 2 เคส error ให้ข้อความเดิมของ -- rpc.guest_merge ยังคงเดิม: ไม่ส่ง src มาเลย vs ส่ง src ที่เท่ากับ des SELECT count(*) INTO v_given FROM unnest(COALESCE(i_src_guest_ids, '{}'::integer[])) s WHERE s IS NOT NULL; PERFORM sp_raise_error_if(v_given = 0, 'Please specify source guest to merge'); -- ตัดค่าซ้ำ ตัด NULL และตัด destination ออกถ้าถูกส่งมาเป็น source ด้วย SELECT array_agg(DISTINCT s ORDER BY s) INTO v_srcs FROM unnest(i_src_guest_ids) s WHERE s IS NOT NULL AND s <> i_des_guest_id; PERFORM sp_raise_error_if(v_srcs IS NULL, 'Source and destination guest must be different'); FOREACH v_src IN ARRAY v_srcs LOOP PERFORM sp_guest_merge(v_src, i_des_guest_id); END LOOP; RETURN array_length(v_srcs, 1); END