61 lines
1.1 KiB
PL/PgSQL
61 lines
1.1 KiB
PL/PgSQL
create type menu_tree as (code text,description text);
|
|
|
|
create or replace function comptaproc.get_profile_menu(login text)
|
|
returns setof menu_tree
|
|
as
|
|
$BODY$
|
|
declare
|
|
a menu_tree;
|
|
e menu_tree;
|
|
begin
|
|
for a in select me_code,me_description from v_all_menu where user_name=login
|
|
and me_code_dep is null and me_type <> 'PR' and me_type <>'SP'
|
|
loop
|
|
return next a;
|
|
|
|
for e in select * from get_menu_tree(a.code,login)
|
|
loop
|
|
return next e;
|
|
end loop;
|
|
|
|
end loop;
|
|
return;
|
|
end;
|
|
$BODY$ language plpgsql;
|
|
|
|
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION comptaproc.get_menu_tree(p_code text,login text)
|
|
RETURNS SETOF menu_tree AS
|
|
$BODY$
|
|
declare
|
|
i menu_tree;
|
|
e menu_tree;
|
|
a text;
|
|
x v_all_menu%ROWTYPE;
|
|
begin
|
|
for x in select * from v_all_menu where me_code_dep=p_code::text and user_name=login::text
|
|
loop
|
|
if x.me_code_dep is not null then
|
|
i.code := x.me_code_dep||'/'||x.me_code;
|
|
else
|
|
i.code := x.me_code;
|
|
end if;
|
|
|
|
i.description := x.me_description;
|
|
|
|
return next i;
|
|
|
|
for e in select * from get_menu_tree(x.me_code,login)
|
|
loop
|
|
e.code:=x.me_code_dep||'/'||e.code;
|
|
return next e;
|
|
end loop;
|
|
|
|
end loop;
|
|
return;
|
|
end;
|
|
$BODY$
|
|
LANGUAGE plpgsql;
|
|
|