| | |
| | | |
| | | select new_guid(); |
| | | ----------------------------------------------------------------------------------------------------- 02.递归查询函数 |
| | | -- drop function rec_query_dep(id integer, tab varchar); |
| | | -- drop function rec_query_dep(integer, varchar); |
| | | create or replace function fn_rec_query(id integer, tab varchar) |
| | | returns varchar as $$ |
| | | declare |
| | |
| | | $$ language plpgsql; |
| | | |
| | | select fn_rec_query(1, 'dep'); select fn_rec_query(null, 'dep'); select fn_rec_query(10, 'dir'); |
| | | ----------------------------------------------------------------------------------------------------- 03.查询用户名 |
| | | ----------------------------------------------------------------------------------------------------- 03.递归查询完整名 |
| | | -- drop function fn_get_fullname(varchar, integer); |
| | | create or replace function fn_get_fullname(code varchar, genre integer) |
| | | returns varchar as $$ |
| | | declare |
| | | rec varchar := ''; |
| | | str varchar := ''; |
| | | tab varchar := 'dep'; |
| | | begin |
| | | if (code is null or genre is null) then |
| | | return ''; |
| | | end if; |
| | | if genre = 2 then |
| | | tab := 'dir'; |
| | | end if; |
| | | |
| | | for rec in execute 'with recursive rs as (' || |
| | | 'select code, pid, name from lf.sys_' || tab || ' where code = ''' || code || ''' ' || |
| | | 'union select a.code, a.pid, a.name from lf.sys_' || tab || ' a, rs b where a.id = b.pid' || |
| | | ') select name from rs order by code' |
| | | loop |
| | | str = str || '\' || rec; |
| | | end loop; |
| | | |
| | | if (char_length(str) > 1) then |
| | | str = substring(str, 2); |
| | | end if; |
| | | |
| | | return str; |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | select fn_rec_query(55, 'dep'); select fn_rec_query(90, 'dir'); |
| | | select fn_get_fullname('00030701', 1); select fn_get_fullname('01000000020000', 2); |
| | | /*with recursive rs as ( |
| | | select code, pid, name from lf.sys_dep where code = '00030701' |
| | | union select a.code, a.pid, a.name from lf.sys_dep a, rs b where a.id = b.pid |
| | | ) select name from rs order by code;*/ |
| | | ----------------------------------------------------------------------------------------------------- 04.查询用户名 |
| | | -- execute format('select uname from lf.sys_user where id = %s', id) into str; |
| | | -- drop function fn_uname(id integer); |
| | | create or replace function fn_uname(id integer) |
| | |
| | | $$ language plpgsql; |
| | | |
| | | select fn_uname(null); select fn_uname(1); |
| | | ----------------------------------------------------------------------------------------------------- 04.查询版本名 |
| | | ----------------------------------------------------------------------------------------------------- 05.查询版本名 |
| | | -- drop function fn_ver(id integer); |
| | | create or replace function fn_ver(id integer) |
| | | returns varchar as $$ |
| | |
| | | $$ language plpgsql; |
| | | |
| | | select fn_ver(0); |
| | | ----------------------------------------------------------------------------------------------------- 05.递归查询ID数组 |
| | | ----------------------------------------------------------------------------------------------------- 06.递归查询ID数组 |
| | | -- drop function fn_rec_array(id integer, tab varchar); |
| | | create or replace function fn_rec_array(id integer, tab varchar) |
| | | returns integer[] as $$ |
| | |
| | | |
| | | select fn_rec_array(1, 'dep'); select fn_rec_array(10, 'dir'); |
| | | select * from lf.sys_user a where a.depid = ANY(fn_rec_array(15,'dep')); |
| | | ----------------------------------------------------------------------------------------------------- 06.查询目录ID数组 |
| | | -- drop function fn_dir_arrs(pids varchar); |
| | | create or replace function fn_dir_arrs(pids varchar) returns integer[] as $$ |
| | | declare |
| | | ids integer[]; |
| | | sid integer; |
| | | begin |
| | | for sid in execute |
| | | 'with recursive rs as(select id, pid from lf.sys_dir where id in (' || pids || ') ' || |
| | | 'union select a.id,a.pid from lf.sys_dir a, rs b where a.pid = b.id) ' || |
| | | 'select distinct id from rs order by id' |
| | | loop |
| | | select array_append(ids, sid) into ids; |
| | | end loop; |
| | | |
| | | return ids; |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | select fn_dir_arrs('2,5,7,9,12'); |
| | | select * from lf.sys_meta where dirid = ANY(fn_dir_arrs('2,5,7,9,12')); |
| | | ----------------------------------------------------------------------------------------------------- 07.获取实体名 |
| | | /*create or replace function fn_get_entity(tab varchar) |
| | | returns varchar as $$ |
| | | declare |
| | | str varchar; |
| | | rs varchar = ''; |
| | | begin |
| | | foreach str in array (select string_to_array(tab, '_')) loop |
| | | if (length(rs) = 0 or length(str) = 1) then |
| | | rs = rs || str; |
| | | else |
| | | rs = rs || initcap(str); |
| | | end if; |
| | | end loop; |
| | | |
| | | return rs; |
| | | end; |
| | | $$ language plpgsql;*/ |
| | | |
| | | create or replace function fn_get_entity(tab varchar) |
| | | returns varchar as $$ |
| | | declare |
| | |
| | | |
| | | select ST_astext(ST_Union(geom)) as route from pgr_fromAtoB('lrdl'::text, 116.78999, 39.9468, 116.80458, 39.94758); |
| | | select st_astext(geom) route from pgr_fromAtoB('lrdl', 116.78999, 39.9468, 116.80458, 39.94758); |
| | | ----------------------------------------------------------------------------------------------------- |
| | | /******************************************************************************** 以下为废弃函数 ********************************************************************************/ |
| | | ----------------------------------------------------------------------------------------------------- a.查询目录ID数组 * |
| | | -- drop function fn_dir_arrs(pids varchar); |
| | | create or replace function fn_dir_arrs(pids varchar) returns integer[] as $$ |
| | | declare |
| | | ids integer[]; |
| | | sid integer; |
| | | begin |
| | | for sid in execute |
| | | 'with recursive rs as(select id, pid from lf.sys_dir where id in (' || pids || ') ' || |
| | | 'union select a.id,a.pid from lf.sys_dir a, rs b where a.pid = b.id) ' || |
| | | 'select distinct id from rs order by id' |
| | | loop |
| | | select array_append(ids, sid) into ids; |
| | | end loop; |
| | | |
| | | return ids; |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | select fn_dir_arrs('2,5,7,9,12'); |
| | | select * from lf.sys_meta where dirid = ANY(fn_dir_arrs('2,5,7,9,12')); |
| | | ----------------------------------------------------------------------------------------------------- b.获取实体名称 |
| | | -- drop function fn_get_entity(varchar); |
| | | create or replace function fn_get_entity(tab varchar) |
| | | returns varchar as $$ |
| | | declare |
| | | str varchar; |
| | | rs varchar = ''; |
| | | begin |
| | | foreach str in array (select string_to_array(tab, '_')) loop |
| | | if (length(rs) = 0 or length(str) = 1) then |
| | | rs = rs || str; |
| | | else |
| | | rs = rs || initcap(str); |
| | | end if; |
| | | end loop; |
| | | |
| | | return rs; |
| | | end; |
| | | $$ language plpgsql; |
| | | ----------------------------------------------------------------------------------------------------- |