今天oracle里面查询所有表的行数,刚开始用select t.table_name,t.num_rows from user_tables t查询后发现有个表记录数和实际单表查询结果不一致,后来发现
num_rows存储的是上次分析后的值,不准确,要使用该方法,必须分析后才可以试用
直接在查询窗口执行如下语句
declare v_tName varchar(50); v_sqlanalyze varchar(500); v_num number; v_sql varchar(500); cursor c1 is select table_name from user_tables; begin open c1; loop fetch c1 into v_tName; if c1%found then v_sqlanalyze :='analyze table '||v_tName||' estimate statistics'; execute immediate v_sqlanalyze; v_sql := 'select NUM_ROWS from user_tables where table_name =upper('''||v_tName||''')'; execute immediate v_sql into v_num; dbms_output.put_line('表名: '||v_tName||' 行数: '||v_num); else exit; end if; end loop; end;
在结果里成功查到准确的记录数