CREATE OR REPLACE FUNCTION "public"."p_update_dist_full_path"()
RETURNS "pg_catalog"."void" AS $BODY$
DECLARE
c_record record;
c_temp record;
exesql varchar;
c_code varchar;
BEGIN
update table_district set id_full_path='',code_full_path='',name_full_path='';
update table_district set id_full_path=id,code_full_path=code,name_full_path=name where id='1';
for c_record in
select id,pid,n from table_district _r where n>=0 and id !=1 order by n desc
loop
select id::varchar,code,name INTO c_temp from table_district where id= c_record.pid;
if c_temp.code = '' or c_temp.code is null THEN
update table_district set id_full_path=(CASE id_full_path WHEN '' then c_temp.id else concat(id_full_path,',',c_temp.id) END),name_full_path=concat(name_full_path,'/',c_temp.name) where id = c_record.id;
else
update table_district set id_full_path=(CASE id_full_path WHEN '' then c_temp.id else concat(id_full_path,',',c_temp.id) END),code_full_path=concat(code_full_path,'/',c_temp.code),name_full_path=concat(name_full_path,'/',c_temp.name) where id = c_record.id;
end if;
end loop;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
Postgresql函数示例
于 2021-01-07 19:50:06 首次发布