create or replace package body help as
type r is record (
time number,
cpu_time number,
text varchar2(1000));
type tr is table of r index by pls_integer;
t tr;
procedure out(p_txt in varchar2, p_nl in boolean default true) as
begin
dbms_output.put(p_txt);
if p_nl then dbms_output.new_line; end if;
end out;
procedure h (p_txt in varchar2) as
v_cnt number := t.count;
begin
t(v_cnt).time := dbms_utility.get_time;
t(v_cnt).cpu_time := dbms_utility.get_cpu_time;
t(v_cnt).text := p_txt;
end h;
procedure b as
begin
t.delete;
h('BEGIN');
end b;
procedure i(p_txt in varchar2) as
begin
h(p_txt);
end i;
procedure e as
begin
h('END');
end e;
procedure show as
v_diff number := 0;
v_diff_start number := 0;
v_cpu_diff number := 0;
v_cpu_diff_start number := 0;
begin
if t.count > 0 then
out(' step start d_step cpu d_cpu text');
out(' ---- ------- ------- ------- ------- ----------------------------------------------------------');
end if;
for i in t.FIRST .. t.LAST loop
if i > 0 then
v_diff := round((t(i).time - t(i-1).time)/100, 4);
v_cpu_diff := round((t(i).cpu_time - t(i-1).cpu_time)/100, 4);
v_diff_start := round((t(i).time - t(0).time)/100, 4);
v_cpu_diff_start := round((t(i).cpu_time - t(0).cpu_time)/100, 4);
end if;
out(to_char(i, '999') || '. ' || to_char(v_diff_start, '990d9999') || to_char(v_diff, '990d9999'), false);
out(to_char(v_cpu_diff_start, '990d9999') || to_char(v_cpu_diff, '990d9999') || ' ' || t(i).text );
end loop I;
end show;
/*
procedure mem as
v_own dbms_session.lname_array;
v_nm dbms_session.lname_array;
v_t dbms_session.integer_array;
v_ua dbms_session.integer_array;
v_fa dbms_session.integer_array;
v_sum_used number := 0;
v_sum_free number := 0;
v_line varchar2(2000);
begin
dbms_session.get_package_memory_utilization(v_own, v_nm, v_t, v_ua, v_fa);
out('mem cnt: ' || v_own.COUNT );
for i in v_own.FIRST .. v_own.LAST loop
v_line := 'owner: ' || rpad(v_own(i), 20, ' ');
v_line := v_line || ' name: ' || rpad(v_nm(i), 20, ' ');
v_line := v_line || ' typ: ' || lpad(v_t(i), 5, ' ');
v_line := v_line || ' used amount: ' || to_char(v_ua(i), '9g999g999g990');
v_line := v_line || ' free amount: ' || to_char(v_fa(i), '9g999g999g990');
out(v_line);
v_sum_used := v_sum_used + v_ua(i);
v_sum_free := v_sum_free + v_fa(i);
end loop i;
out(lpad('Sum Used: ' , 82, ' ' ) || to_char(v_sum_used, '9g999g999g990') || lpad('Sum Free: ' , 15, ' ' ) || to_char(v_sum_free, '9g999g999g990' ) );
end mem;
*/
end help;
/