如何避免循环内存储过程中的重复插入

时间:2019-07-15 14:21:30

标签: postgresql

在某些情况下,我很难从执行两个插入操作的存储过程中获得预期的结果。第二个插入取决于第一个插入的结果(id)。但是,结果是重复的-每个记录插入两次。

 CREATE OR REPLACE FUNCTION public.field_validations2(
  )
    RETURNS void
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$
DECLARE
   cust_rec RECORD;
  new_signature_id integer;
   inconsideration varchar;
BEGIN
  inconsideration := 'IN_CONSIDERATION';
    FOR cust_rec IN
        EXECUTE format('SELECT l.* FROM public.report_attached_person_many_to_many l INNER JOIN public.report r ON l.report_id = r.id WHERE r.report_status=%L', inconsideration)
    LOOP
  INSERT INTO public.report_signature(
  id, active, created, created_by, deleted, modified, modified_by, comment, status, type, staff)
  VALUES (nextval('hibernate_sequence'),'true','1561713543512', '10000001', 'false', '1561713543512', '10000001', '', '0', '1' , cust_rec.staff_id)
  RETURNING id into new_signature_id;
  INSERT INTO public.report_required_signatures_many_to_many(
    report_id, signature_id)
    VALUES (cust_rec.report_id, new_signature_id);
    END LOOP;
END
$BODY$;

ALTER FUNCTION public.field_validations2()
    OWNER TO postgres;

0 个答案:

没有答案