WOW ! all those new column names wth quirky names.
Well here is the procdure. make sure you got the GRANTs right
in order to compile it.
Also check to make sure I got the your_variable/my_variable match right.
hth
robert chin
CREATE OR REPLACE PROCEDURE table_fragmentation_info
( v_table IN VARCHAR2,
v_owner IN VARCHAR2
)
IS
v_num_rows dba_tables.num_rows%TYPE;
v_hwm_blocks dba_tables.blocks%TYPE;
v_above_hwm dba_tables.empty_blocks%TYPE;
v_row_chains dba_tables.chain_cnt%TYPE;
v_row_size dba_tables.avg_row_len%TYPE;
v_pct_used dba_tables.pct_used%TYPE;
v_pct_free dba_tables.pct_free%TYPE;
v_row_chains_pct NUMBER;
v_block_size v$parameter.value%TYPE;
v_blocks_alloc NUMBER;
v_bytes_alloc NUMBER;
v_hwm_bytes NUMBER;
v_bytes_used NUMBER;
v_blocks_pct_used NUMBER;
v_bytes_pct_used NUMBER;
v_sf INTEGER;
BEGIN
select num_rows,
blocks,
empty_blocks,
chain_cnt,
avg_row_len,
pct_used,
pct_free,
100*chain_cnt/num_rows
INTO
v_num_rows,
v_hwm_blocks,
v_above_hwm,
v_row_chains,
v_row_size,
v_pct_used,
v_pct_free,
v_row_chains_pct
from dba_tables
where table_name = upper(v_table)
and owner = upper(v_owner);
-----------------------------------------
select value INTO v_block_size
FROM v$parameter WHERE name = 'db_block_size';
------------------------------------------
v_blocks_alloc := (v_hwm_blocks + v_above_hwm);
v_bytes_alloc := (V_hwm_blocks + v_above_hwm)* v_block_size/1024/1024;
v_hwm_bytes := (v_hwm_blocks * v_block_size)/1024/1024;
v_bytes_used := (v_num_rows * v_row_size)/1024/1024;
------------------------------------------
v_blocks_pct_used := 100 * v_hwm_blocks / v_blocks_alloc;
v_bytes_pct_used := 100 * v_num_rows * v_row_size / v_hwm_bytes/1024/1024;
------------------------------------------
select count(*) INTO v_sf
from dba_extents
where segment_name= upper(v_table)
and owner = upper(v_owner);
------------------------------------------
dbms_output.put_line('Owner : '||v_owner);
dbms_output.put_line('Table name : '||v_table);
dbms_output.put_line('pct_free : '||v_pct_free);
dbms_output.put_line('pct_used : '||v_pct_used);
dbms_output.put_line('Number of extents : '||v_sf||' <-- Segment
Fragmentation');
dbms_output.put_line('Rows : '||v_num_rows);
dbms_output.put_line('Row size : '||v_row_size);
dbms_output.put_line('Rows frag:migration: '||v_row_chains);
dbms_output.put_line('Row % frag:migr. : '||v_row_chains_pct||'% <-- Row
Fragmentation');
dbms_output.put_line('DB block size : '||v_block_size);
dbms_output.put_line('Blocks alloc : '||v_blocks_alloc);
dbms_output.put_line('Block HWM : '||v_hwm_blocks);
dbms_output.put_line('% alloc used by HWM: '||v_blocks_pct_used||'%');
dbms_output.put_line('MB alloc : '||v_bytes_alloc||'MB');
dbms_output.put_line('MB HWM : '||v_hwm_bytes||'MB');
dbms_output.put_line('MB used : '||v_bytes_used||'MB');
dbms_output.put_line('% HWM bytes used : '||v_bytes_pct_used||'% <-- Block
Fragmentation');
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(CHR(10)||'Are you sure you entered FIRST TABLE NAME THEN
OWNER NAME correctly ?');
END;
/
----- Original Message -----
To: "Multiple recipients of list ORACLE-L" <[EMAIL PROTECTED]>
Sent: Wednesday, November 28, 2001 2:05 PM
> Hello all,
>
> I have attached an sql file containing a set of sql's (6) of them, which gives
me information regarding table fragmentation. What I need to do is instead of
writing seperate sql's, I need to write a procedure, where in I pass the owner
and table name and then the result comes out, as you will see in the last sql.
>
> What I need is, if some one could please help in writing a procedure? How to
put cursors and use all the information in different cursor variables etc.
>
> Please help.
>
> Thanks.
>
> Rgds,
>
> Raja
>
>
>
>
--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author: Robert Chin
INET: [EMAIL PROTECTED]
Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051
San Diego, California -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from). You may
also send the HELP command for other information (like subscribing).