create or replace procedure unwrap_r(aname varchar2) is root sys.pidl.ptnod; status sys.pidl.ub4; -- procedure recurse (n sys.pidl.ptnod) is -- seq sys.pidl.ptseqnd; len integer; -- begin -- --dbms_output.put_line('Node :'||n); --dbms_output.put_line('code (DEC) :'||pidl.ptkin(n)); --dbms_output.put_line('Node Type :'||pidl.ptattnnm(pidl.ptkin(n))); --dbms_output.put_line('--'); if(pidl.ptkin(n) = diana.d_comp_u) then recurse(diana.a_unit_b(n)); elsif (pidl.ptkin(n) = diana.d_s_body) then dbms_output.put_line('CREATE OR REPLACE '); recurse(diana.a_d_(n)); recurse(diana.a_header(n)); recurse(diana.a_block_(n)); dbms_output.put_line('END;'); dbms_output.put_line('/'); elsif(pidl.ptkin(n) = diana.di_proc) then dbms_output.put_line('PROCEDURE '||diana.l_symrep(n)); elsif(pidl.ptkin(n) = diana.d_p_) then recurse(diana.as_p_(n)); elsif(pidl.ptkin(n) = diana.ds_param) then -- not implemented null; elsif(pidl.ptkin(n) = diana.d_block) then dbms_output.put_line('IS '); recurse(diana.as_item(n)); dbms_output.put_line('BEGIN'); recurse(diana.as_stm(n)); recurse(diana.as_alter(n)); elsif(pidl.ptkin(n) = diana.ds_item) then -- not implemented null; elsif(pidl.ptkin(n) = diana.ds_stm) then seq := diana.as_list(n); len := pidl.ptslen(seq) - 1; for i in 0..len loop recurse(pidl.ptgend(seq,i)); end loop; elsif(pidl.ptkin(n) = diana.d_null_s) then dbms_output.put_line('NULL;'); elsif(pidl.ptkin(n) = diana.ds_alter) then -- not implemented null; else dbms_output.put_line('****ERROR*****'); end if; -- end recurse; -- begin dbms_output.put_line('Start up'); sys.diutil.get_diana( aname, NULL, NULL, NULL, status, root, 1); if (status <> sys.diutil.s_ok) then sys.dbms_output.put_line('Error: couldn''t find diana; status: ' || to_char(status)); raise sys.diutil.e_subpNotFound; end if; -- -- recurse through the DIANA nodes -- recurse(root); -- end unwrap_r; /