PostgreSQL function examples

-- 插入 wr_map_wids_cell 函数
CREATE OR REPLACE FUNCTION npas.insertWrMapWidsCell() RETURNS void AS $$
DECLARE
    widsWrid uuid; -- 室分无线ID
    widsYrid VARCHAR(256); -- 室分亿阳ID
    widsCellWrid uuid; -- 室分小区无线ID
    cellWrid uuid; -- 小区无线ID
    cellYrid VARCHAR(256); -- 小区亿阳ID
    cellYridArr VARCHAR(256)[];
-- 定义 begin end, 保证在同个事务中处理
BEGIN
    -- 查询全部 综合资源网元ID,GSM信源小区ID,LTE信源小区ID,关联NRCELL_ID 并遍历处理
    for widsYrid,cellYridArr in (select 综合资源网元ID,string_to_array(concat(GSM信源小区ID,',',LTE信源小区ID,',',关联NRCELL_ID),',') from zongzi.v_device_wireless_distributor) loop
    	-- 根据 室分亿阳ID 查询 wr_yr_sync_log 中 yr_res_type_key 为 wids 的对应 wr_cuid
    	select wr_cuid into widsWrid from npas.wr_yr_sync_log where yr_res_type_key='wids' and yr_cuid=widsYrid;
    	foreach cellYrid in array cellYridArr loop
    		-- 如果是空字符串,则跳过不处理
    		if cellYrid='' then
    			continue;
    		else
    			-- 根据 小区亿阳ID 查询 wr_yr_sync_log 中 yr_res_type_key 为 cell 的对应 cellWrid
    			select wr_cuid into cellWrid from npas.wr_yr_sync_log where yr_res_type_key in('gsmcell','eutrancell','nrcell') and yr_cuid=cellYrid;
    			select uuid_generate_v4() into widsCellWrid;
    			-- 插入一条 wr_map_wids_cell 记录
    			insert into npas.wr_map_wids_cell(wids_cell_id,wids_id,logic_cell_id,lastmodifytime,is_del) values (widsCellWrid,widsWrid,cellWrid,now(),'f');
    			-- 插入一条 wr_yr_sync_log_20201031_add 记录
    			insert into npas.wr_yr_sync_log_20201031_add(yr_res_type_key,wr_cuid,yr_cuid,create_time,last_sync_time) values ('wids_cell',widsCellWrid,concat(widsYrid,',',cellYrid),now(),now());
    		end if;
    	end loop;
    end loop;
END;
$$ LANGUAGE plpgsql;

-- 执行以下语句可生效
-- select npas.insertWrMapWidsCell();

-- 执行完后,删除 npas.insertWrMapWidsCell() 函数,防止重复执行 20201101 pre/pro均已执行
DROP FUNCTION npas.insertWrMapWidsCell();

 

Guess you like

Origin blog.csdn.net/londa/article/details/109428579