create or replace procedure gettabinfo is cursor c1 is select t.tname from tab t where t.tabtype = 'TABLE'; sqlstr varchar2(1024); num integer; fieldnum integer; total_size number(32, 4);//by gisoracle@126.com begin delete from tt; for rr in c1 loop begin sqlstr := 'select count(*) from ' || rr.tname; execute immediate sqlstr into num; select count(*) into fieldnum from user_tab_cols t where t.table_name = rr.tname; select t.bytes / 1024 / 1024 into total_size from user_segments t where t.segment_name = rr.tname; insert into tt values (rr.tname, num, fieldnum, num * fieldnum, total_size); exception when others then dbms_output.put_line(rr.tname); end; end loop; commit; commit; end gettabinfo; tt 的表结构 // by gisoracle SQL> desc tt; Name Type Nullable Default Comments --------- ------------ -------- ------- -------- TAB VARCHAR2(32) Y RECORDNUM INTEGER Y FIELDNUM INTEGER Y SUMNUM INTEGER Y DISKSIZE NUMBER(32,4) Y