¶Ô±ÈÐÂÎļþ |
| | |
| | | ----------------------------------------------------------------------------------------------------- d.GUIDçæå½æ° |
| | | create or replace function new_guid() |
| | | returns "pg_catalog"."varchar" as $body$ |
| | | declare |
| | | v_seed_value varchar(32); |
| | | begin |
| | | select md5(inet_client_addr()::varchar || timeofday() || inet_server_addr()::varchar || to_hex(inet_client_port())) |
| | | into v_seed_value; |
| | | |
| | | return (substr(v_seed_value,1,8) || '-' || |
| | | substr(v_seed_value,9,4) || '-' || |
| | | substr(v_seed_value,13,4) || '-' || |
| | | substr(v_seed_value,17,4) || '-' || |
| | | substr(v_seed_value,21,12)); |
| | | end; |
| | | $body$ language 'plpgsql' volatile security definer; |
| | | |
| | | select new_guid(); |
| | | ----------------------------------------------------------------------------------------------------- e.é彿¥è¯¢å½æ° |
| | | -- drop function rec_query_dep(id integer, tab varchar); |
| | | create or replace function fn_rec_query(id integer, tab varchar) |
| | | returns varchar as $$ |
| | | declare |
| | | str varchar = ''; |
| | | rec varchar = ''; |
| | | begin |
| | | if (id is null or tab is null) then |
| | | return ''; |
| | | end if; |
| | | |
| | | for rec in execute 'with recursive rs as(' || |
| | | 'select id,pid,name from lf.sys_' || tab || ' where id=' || id || |
| | | ' union select a.id,a.pid,a.name from lf.sys_' || tab || ' a, rs b where a.id=b.pid '|| |
| | | ') select name from rs order by id' |
| | | 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(1, 'dep'); |
| | | ----------------------------------------------------------------------------------------------------- f.æ¥è¯¢ç¨æ·å |
| | | -- 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) |
| | | returns varchar as $$ |
| | | declare |
| | | str varchar; |
| | | begin |
| | | if (id is null) then |
| | | return null; |
| | | end if; |
| | | |
| | | execute 'select uname from lf.sys_user where id = ' || id into str; |
| | | |
| | | return str; |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | select fn_uname(1); |
| | | ----------------------------------------------------------------------------------------------------- g.æ¥è¯¢çæ¬å |
| | | -- drop function fn_ver(id integer); |
| | | create or replace function fn_ver(id integer) |
| | | returns varchar as $$ |
| | | declare |
| | | str varchar; |
| | | begin |
| | | if (id is null) then |
| | | return null; |
| | | end if; |
| | | |
| | | execute 'select name from lf.sys_ver where id = ' || id into str; |
| | | |
| | | return str; |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | select fn_ver(0); |
| | | ----------------------------------------------------------------------------------------------------- h.é彿¥è¯¢IDæ°ç» |
| | | -- drop function fn_rec_array(id integer, tab varchar); |
| | | create or replace function fn_rec_array(id integer, tab varchar) |
| | | returns integer[] as $$ |
| | | declare |
| | | ids integer[]; |
| | | sid integer; |
| | | begin |
| | | for sid in execute 'with recursive rs as(' || |
| | | 'select id,pid from lf.sys_' || tab || ' where id=' || id || |
| | | ' union select a.id,a.pid from lf.sys_' || tab || ' a, rs b where a.pid=b.id '|| |
| | | ') select id from rs order by id' |
| | | loop |
| | | select array_append(ids, sid) into ids; |
| | | end loop; |
| | | |
| | | return ids; |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | select fn_rec_array(1, 'dep'); |
| | | select fn_rec_array(10, 'dir'); |
| | | ----------------------------------------------------------------------------------------------------- i.è·åå®ä½å |
| | | create or replace function fn_get_entity(tab varchar) |
| | | returns varchar as $$ |
| | | declare |
| | | begin |
| | | if (tab is null) then |
| | | return ''; |
| | | end if; |
| | | |
| | | return replace(tab, '_', ''); |
| | | end; |
| | | $$ language plpgsql; |
| | | |
| | | select fn_get_entity('dlg_25w_boua_s'); |
| | | ----------------------------------------------------------------------------------------------------- j.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; |
| | | ----------------------------------------------------------------------------------------------------- |