set define off
create or replace package designer_queries
as
procedure retrieve_network ( p_startmodule varchar2,p_level varchar2);
procedure retrieve_network_no_roles ( p_startmodule varchar2,p_level varchar2);
procedure roles_versus_modules ;
procedure Header ;
procedure Footer ;
END;
/
create or replace package body designer_queries
as
procedure retrieve_network (p_startmodule varchar2, p_level varchar2)
as
l_level number;
cursor child_exists(b_irid number)
is
select 1
from CI_MODULE_NETWORKS mm
where parent_module_reference = b_irid;
v_dummy number;
BEGIN
l_level := p_level;
IF l_level = '1' THEN
dbms_output.put_line('
');
dbms_output.put_line('Expand All ');
dbms_output.put_line('Collapse All ');
dbms_output.put_line('
');
dbms_output.put_line('
'||p_startmodule||'/ ');
dbms_output.put_line('
');
END IF;
FOR rec_start in (select irid from ci_modules where short_name=p_startmodule) LOOP
FOR rec_level in (select mod_child.short_name child,
nvl(lag(mod_child.short_name,1) over (order by mm.called_sequence),'XYZ') prev_child,
nvl(lead(mod_child.short_name,1) over (order by mm.called_sequence),'XYZ') next_child,
mod_child.top_title top_title_child,
mod_child.irid irid_child,
mod_child.general_module_type,
r.name rolename
from CI_MODULE_NETWORKS mm, ci_modules mod_child
, CI_ROLE_MODULE_ACCESSES i, CI_ROLES r, ci_modules mod_parent
where mod_parent.short_name = p_startmodule
and mm.parent_module_reference = mod_parent.irid
and mm.child_module_reference = mod_child.irid
and mod_child.irid = i.general_module_reference
and r.irid = i.role_reference
order by mm.called_sequence) loop
IF rec_level.child <> rec_level.prev_child THEN
dbms_output.put_line(lpad(' ',l_level*3,' ')||'
');
IF l_level < 3 or rec_level.general_module_type = 'MENU' THEN
open child_exists(rec_level.irid_child);
fetch child_exists into v_dummy;
if child_exists%found then
dbms_output.put_line('
');
end if;
close child_exists;
END IF;
dbms_output.put_line('
');
dbms_output.put_line('
ROLES
');
dbms_output.put_line('
');
END IF;
dbms_output.put_line('
'||rec_level.rolename||'
');
IF rec_level.child <> rec_level.next_child THEN
dbms_output.put_line('
');
END IF;
IF rec_level.child <> rec_level.next_child THEN
dbms_output.put_line('
');
END IF;
END LOOP;
END LOOP;
IF l_level = '1' THEN
dbms_output.put_line('
');
dbms_output.put_line('
');
dbms_output.put_line('
');
END IF;
END retrieve_network;
procedure retrieve_network_no_roles (p_startmodule varchar2, p_level varchar2)
as
l_level number;
cursor child_exists(b_irid number)
is
select 1
from CI_MODULE_NETWORKS mm
where parent_module_reference = b_irid;
v_dummy number;
BEGIN
l_level := p_level;
IF l_level = '1' THEN
dbms_output.put_line('
');
dbms_output.put_line('Expand All ');
dbms_output.put_line('Collapse All ');
dbms_output.put_line('
');
dbms_output.put_line('
'||p_startmodule||'/ ');
dbms_output.put_line('
');
END IF;
FOR rec_start in (select irid from ci_modules where short_name=p_startmodule) LOOP
FOR rec_level in (select mod_child.short_name child,
nvl(lag(mod_child.short_name,1) over (order by mm.called_sequence),'XYZ') prev_child,
nvl(lead(mod_child.short_name,1) over (order by mm.called_sequence),'XYZ') next_child,
mod_child.top_title top_title_child,
mod_child.irid irid_child,
mod_child.general_module_type
from CI_MODULE_NETWORKS mm, ci_modules mod_child, ci_modules mod_parent
where mod_parent.short_name = p_startmodule
and mm.parent_module_reference = mod_parent.irid
and mm.child_module_reference = mod_child.irid
order by mm.called_sequence) loop
IF rec_level.child <> rec_level.prev_child THEN
dbms_output.put_line(lpad(' ',l_level*3,' ')||'
');
IF l_level < 4 or rec_level.general_module_type = 'MENU' THEN
open child_exists(rec_level.irid_child);
fetch child_exists into v_dummy;
if child_exists%found then
dbms_output.put_line('
');
dbms_output.put_line('Expand All ');
dbms_output.put_line('Collapse All ');
dbms_output.put_line('
');
dbms_output.put_line('
Roles ');
dbms_output.put_line('
');
FOR rec_start in (select case rn
when 1
then role
end role
, module||' - '||top_title module
from ( select mde.name module
, mde.top_title
, rle.name role
, row_number() over (partition by rle.name
order by mde.name
) rn
from ci_role_module_accesses rms
, ci_roles rle
, ci_general_modules mde
where rle.id = rms.role_reference
and rms.general_module_reference = mde.id
order by rle.name , mde.name )) loop
IF rec_start.role is not null THEN
if l_initialized then
dbms_output.put_line('
');
else
l_initialized := true;
end if;
dbms_output.put_line('
');
END roles_versus_modules;
PROCEDURE HEADER
is
BEGIN
dbms_output.put_line('');
dbms_output.put_line('');
dbms_output.put_line(' List of Modules');
dbms_output.put_line(' ');
dbms_output.put_line(' ');
dbms_output.put_line(' ');
dbms_output.put_line('');
dbms_output.put_line('');
dbms_output.put_line('
');
dbms_output.put_line('');
dbms_output.put_line('');
END FOOTER;
END;
/
create public synonym designer_queries for designer_queries;
grant execute on designer_queries to public;
--@p:\sql\generate_designer_module_network.sql