Untitled
unknown
sql
5 months ago
5.0 kB
3
Indexable
-- DROP FUNCTION public.fzi_migration_partner_vs_ref_partner(varchar, int8, int8, varchar, varchar, varchar); CREATE OR REPLACE FUNCTION public.fzi_migration_partner_vs_ref_partner(character varying, bigint, bigint, character varying, character varying, character varying) RETURNS void LANGUAGE plpgsql AS $function$ DECLARE pSessionId ALIAS FOR $1; pTenantId ALIAS FOR $2; pUserId ALIAS FOR $3; pDatetime ALIAS FOR $4; pTimestampFrom ALIAS FOR $5; pTimestampTo ALIAS FOR $6; vResult RECORD; vDatatype varchar := 'DATA_VS_REF_PARTNER'; begin -- ADD with tobe_inserted_vs_ref_partner as ( select pTenantId as tenant_id, A.company_id as partner_code, A.ref_id as ref_id, pDatetime as create_datetime, pUserId as create_user_id, pDatetime as update_datetime, pUserId as update_user_id, cast('0' as bigint) as version from zicare.m_company A where not exists ( select 1 from zi_migration B where B.data_type = vDatatype ) AND ( A.modified_date BETWEEN pTimestampFrom::timestamp AND pTimestampTo::timestamp OR A.created_date BETWEEN pTimestampFrom::timestamp AND pTimestampTo::timestamp ) ), inserted_vs_ref_partner as ( insert into public.zi_partner_vs_ref_partner( tenant_id, partner_id, partner_code, ref_partner_id, create_datetime, create_user_id, update_datetime, update_user_id, "version" ) select A.tenant_id, B.partner_id, A.partner_code, C.ref_partner_id, A.create_datetime, A.create_user_id, A.update_datetime, A.update_user_id, A.version from tobe_inserted_vs_ref_partner A join public.m_partner B on B.partner_code = A.partner_code and B.tenant_id = A.tenant_id join public.zi_ref_partner C on C.ref_id = A.ref_id and C.tenant_id = A.tenant_id returning * ), inserted_zi_migration as ( INSERT INTO zi_migration ( id_data, session_id, data_type, data_unique, migration_type, data_change, flg_last, remark, create_user_id, create_datetime, update_user_id, update_datetime, "version" ) SELECT nextval('zi_migration_seq'::regclass), pSessionId, vDataType, A.partner_code as data_unique, 'ADD', A.ref_partner_id as data_change, 'Y', '', pUserId, pDatetime, pUserId, pDatetime, 0 FROM inserted_vs_ref_partner A returning * ) SELECT (SELECT COUNT(1) FROM tobe_inserted_vs_ref_partner) AS tobe_inserted_vs_ref_partner, (SELECT COUNT(1) FROM inserted_vs_ref_partner) AS inserted_vs_ref_partner, (SELECT COUNT(1) FROM inserted_zi_migration) AS inserted_zi_migration INTO vResult; --EDIT with tobe_updated_vs_ref_partner as ( select pTenantId as tenant_id, A.company_id as partner_code, A.ref_id as ref_id, pDatetime as create_datetime, pUserId as create_user_id, pDatetime as update_datetime, pUserId as update_user_id, cast('0' as bigint) as version, A.ref_id as data_change from zicare.m_company A where exists ( select 1 from zi_migration B where B.data_type = vDatatype ) AND ( A.modified_date BETWEEN pTimestampFrom::timestamp AND pTimestampTo::timestamp OR A.created_date BETWEEN pTimestampFrom::timestamp AND pTimestampTo::timestamp ) ), updated_vs_ref_partner as ( update public.zi_partner_vs_ref_partner as A set ref_partner_id = C.ref_partner_id, update_datetime = B.update_datetime, update_user_id = B.update_user_id, version = B.version + 1 from tobe_updated_vs_ref_partner B join public.zi_ref_partner C on C.ref_id = B.ref_id and C.tenant_id = B.tenant_id where A.partner_code = B.partner_code and A.tenant_id = B.tenant_id returning A.*, B.data_change ), inserted_new_zi_migration as ( INSERT INTO zi_migration ( id_data, session_id, data_type, data_unique, migration_type, data_change, flg_last, remark, create_user_id, create_datetime, update_user_id, update_datetime, "version" ) SELECT nextval('zi_migration_seq'::regclass), pSessionId, vDataType, A.partner_code as data_unique, 'EDIT', A.data_change as data_change, 'Y', '', pUserId, pDatetime, pUserId, pDatetime, A."version" FROM updated_vs_ref_partner A returning * ), updated_zi_migration as ( UPDATE zi_migration AS A SET flg_last = 'N' FROM inserted_new_zi_migration B WHERE A.data_type = B.data_type AND A.data_unique = B.data_unique AND A.id_data != B.id_data RETURNING * ) SELECT (SELECT COUNT(1) FROM tobe_updated_vs_ref_partner) AS tobe_updated_vs_ref_partner, (SELECT COUNT(1) FROM updated_vs_ref_partner) AS updated_vs_ref_partner, (SELECT COUNT(1) FROM inserted_new_zi_migration) AS inserted_new_zi_migration, (SELECT COUNT(1) FROM updated_zi_migration) AS updated_zi_migration INTO vResult; END; $function$ ;
Editor is loading...
Leave a Comment