今天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;
在结果里成功查到准确的记录数
本文介绍了一种在Oracle数据库中精确查询所有表行数的方法。通过定义游标遍历所有表并使用analyze语句更新统计信息,再获取每个表的实际行数。
2167

被折叠的 条评论
为什么被折叠?



