我有一些关于获取行数的问题..如果我这样做
select NUM_ROWS,table_name from dba_tables;
我可以获取所有表和记录计数..问题是假设TABLE_NAMEE是我的表名,我有50条记录,我删除了20条记录。当我做的时候
select count(*) from TABLE_NAMEE;
我有30条记录,但是当我做
时select NUM_ROWS from dba_tables where table_name ='TABLE_NAMEE';
我正在获取50条记录,因为我的数据库人员更新架构每月一次。那么如何在不使用dba_tables选项卡的情况下获取ORACLE中的所有表名及其各自的行数,但我可以使用它们来获取不是行数的表名。
答案 0 :(得分:1)
从以下查询中获取NUM_ROWS意味着 DBMS_STATS 会更新no.of rows值。因此,它不包含表格中的当前行数,但上次运行DBMS_STATS时计算了 近似值 。
SELECT table_name,
num_rows
FROM dba_tables
WHERE TABLE_NAME='NAME'
更新DBA_TABLES
视图中的最新num_rows值执行
exec dbms_stats.gather_schema_stats(ownname => 'NAME');`
注意:强> 上面的句子"它不包含表格中的当前行数,但是上次运行DBMS_STATS时计算的近似值。" 因此,即使在更新之后,它也会被包含在内。仍然是近似值,而不是确切的行数。 (但它可能是一个更好的近似值)
使用count(*)调用no的计算。从表中的行。所以这个速度较慢,但得到了正确的结果。