| | |
| | | $$ language plpgsql; |
| | | |
| | | select fn_get_entity('dlg_25w_boua_s'); |
| | | ----------------------------------------------------------------------------------------------------- 08.FME日志触发器 |
| | | create or replace function fn_meta_insert() returns trigger as $$ |
| | | begin |
| | | update lf.sys_meta set tab = new.pg_ns || '.' || new.tcdm, layer = new.tcmc, rows = new.count where eventid = new.parentid; |
| | | |
| | | return new; |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | create or replace trigger fme_log_trigger after insert on lf.sys_fme_log |
| | | for each row execute procedure fn_meta_insert(); |
| | | |
| | | select * from lf.sys_meta; |
| | | /*insert into lf.sys_fme_log (parentid,dirpath,pg_ns,tcmc,tcdm,count) values |
| | | ('8fb3c3dd-6a12-488d-80ae-a93cc7e8b2e3','','bs','中线成果表','m_pipelinepoint',0); |
| | | select * from bs.m_pipelinepoint where parentid='8fb3c3dd-6a12-488d-80ae-a93cc7e8b2e3';*/ |
| | | ----------------------------------------------------------------------------------------------------- 09.查询字典表并统计记录 |
| | | ----------------------------------------------------------------------------------------------------- 08.查询字典表并统计记录 |
| | | -- drop function fn_tab_count(varchar, varchar, varchar, integer); |
| | | create or replace function fn_tab_count(ns varchar, tab varchar, dirs varchar, depid integer) |
| | | returns integer as $$ |
| | |
| | | select fn_rec_array(1, 'dep') |
| | | select count(*) from lf.sys_meta where depid = ANY(fn_rec_array(1, 'dep')); |
| | | select count(*) from bd.dlg_25w_lrdl where depid = ANY(fn_rec_array(1, 'dep')); |
| | | ----------------------------------------------------------------------------------------------------- 10.10进制转62进制 |
| | | -- drop function fn_10to62(numeric); |
| | | create or replace function fn_10to62(num numeric(30, 0)) |
| | | ----------------------------------------------------------------------------------------------------- 09.10进制转62进制 |
| | | -- drop function fn_10_to_62(numeric); |
| | | create or replace function fn_10_to_62(num numeric(30, 0)) |
| | | returns varchar as $$ |
| | | declare |
| | | rs varchar; |
| | |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | select fn_10to62(3843); select fn_10to62(0); select fn_10to62(3844); |
| | | ----------------------------------------------------------------------------------------------------- 11.62进制转10进制 |
| | | -- drop function fn_62to10(numeric); |
| | | create or replace function fn_62to10(ch varchar) |
| | | select fn_10_to_62(3843); select fn_10_to_62(0); select fn_10_to_62(3844); |
| | | ----------------------------------------------------------------------------------------------------- 10.62进制转10进制 |
| | | -- drop function fn_62_to_10(varchar); |
| | | create or replace function fn_62_to_10(ch varchar) |
| | | returns numeric as $$ |
| | | declare |
| | | rs numeric(30, 0); |
| | |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | select fn_62to10('zz'); select fn_62to10('0'); select fn_62to10('100'); |
| | | ----------------------------------------------------------------------------------------------------- 12.路径分析 |
| | | select fn_62_to_10('zz'); select fn_62_to_10('0'); select fn_62_to_10('100'); |
| | | ----------------------------------------------------------------------------------------------------- 11.获取下一个编码 |
| | | -- drop function fn_get_next_code(integer, integer); |
| | | create or replace function fn_get_next_code(pid integer, genre integer) |
| | | returns varchar as $$ |
| | | declare |
| | | cc integer; |
| | | code varchar; |
| | | pcode varchar; |
| | | tab varchar := 'dep'; |
| | | begin |
| | | if (pid is null or genre is null) then |
| | | return '00'; |
| | | end if; |
| | | if genre = 2 then |
| | | tab := 'dir'; |
| | | end if; |
| | | |
| | | execute 'select code from lf.sys_' || tab || ' where id = ' || pid into pcode; |
| | | if pcode is null then |
| | | pcode := ''; |
| | | end if; |
| | | |
| | | for ii in 0..3843 loop |
| | | code := fn_10_to_62(ii); |
| | | if length(code) = 1 then |
| | | code := '0' || code; |
| | | end if; |
| | | |
| | | execute 'select count(*) from lf.sys_' || tab || ' where pid = ' || pid || ' and code = ''' || pcode || code || '''' into cc; |
| | | if cc = 0 then |
| | | return pcode || code; |
| | | end if; |
| | | end loop; |
| | | |
| | | return pcode || '00'; |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | select fn_get_next_code(0, 1); select fn_get_next_code(0, 2); |
| | | ----------------------------------------------------------------------------------------------------- 12.设置表的编码:1-单位,2-目录 |
| | | -- drop function fn_set_tab_codes(integer, integer); |
| | | create or replace function fn_set_tab_codes(pid integer, genre integer) |
| | | returns integer as $$ |
| | | declare |
| | | cc integer; |
| | | rid integer; |
| | | code varchar; |
| | | tab varchar := 'dep'; |
| | | begin |
| | | if (pid is null or genre is null) then |
| | | return 0; |
| | | end if; |
| | | if genre = 2 then |
| | | tab := 'dir'; |
| | | end if; |
| | | |
| | | execute 'select count(*) from lf.sys_' || tab || ' where pid = ' || pid into cc; |
| | | if cc = 0 then |
| | | return 0; |
| | | end if; |
| | | |
| | | for rid in execute 'select id from lf.sys_' || tab || ' where code is null and pid = ' || pid || ' order by order_num' loop |
| | | code := fn_get_next_code(pid, genre); |
| | | execute 'update lf.sys_' || tab || ' set code = ''' || code || ''' where id = ' || rid; |
| | | |
| | | cc := fn_set_tab_codes(rid, genre); |
| | | end loop; |
| | | |
| | | return 1; |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | select fn_set_tab_codes(1, 1); select fn_set_tab_codes(0, 2); |
| | | ----------------------------------------------------------------------------------------------------- 13.FME日志表触发器 |
| | | -- drop function fn_meta_insert(); |
| | | create or replace function fn_meta_insert() returns trigger as $$ |
| | | begin |
| | | update lf.sys_meta set tab = new.pg_ns || '.' || new.tcdm, layer = new.tcmc, rows = new.count where eventid = new.parentid; |
| | | |
| | | return new; |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | -- drop trigger fme_log_trigger on lf.sys_fme_log; |
| | | create or replace trigger fn_fme_log_trigger after insert on lf.sys_fme_log |
| | | for each row execute procedure fn_meta_insert(); |
| | | |
| | | select * from lf.sys_meta; |
| | | /*insert into lf.sys_fme_log (parentid,dirpath,pg_ns,tcmc,tcdm,count) values |
| | | ('8fb3c3dd-6a12-488d-80ae-a93cc7e8b2e3','','bs','中线成果表','m_pipelinepoint',0); |
| | | select * from bs.m_pipelinepoint where parentid='8fb3c3dd-6a12-488d-80ae-a93cc7e8b2e3';*/ |
| | | ----------------------------------------------------------------------------------------------------- 14.单位表触发器 |
| | | -- drop function fn_dep_insert(); |
| | | create or replace function fn_dep_insert() returns trigger as $$ |
| | | begin |
| | | update lf.sys_dep set code = fn_get_next_code(new.pid, 1) where id = new.id; |
| | | |
| | | return new; |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | -- drop trigger fn_dep_trigger on lf.sys_dep; |
| | | create or replace trigger fn_dep_trigger after insert on lf.sys_dep |
| | | for each row execute procedure fn_dep_insert(); |
| | | |
| | | select * from lf.sys_dep where pid = 0 order by id; |
| | | /*insert into lf.sys_dep (pid,name,level,order_num) values (0,'新单位',1,2); |
| | | delete from lf.sys_dep where pid = 0 and id > 1;*/ |
| | | ----------------------------------------------------------------------------------------------------- 15.目录表触发器 |
| | | |
| | | |
| | | ----------------------------------------------------------------------------------------------------- 16.路径分析 |
| | | -- 删除已存在的函数 |
| | | drop function pgr_fromAtoB(varchar, double precision, double precision, double precision, double precision); |
| | | |