我运行了如下语句
select table_name,num_rows,
decode(TABLE_NAME,
'TEST1',(select count(1) from test1 where a.table_name='TEST1'),
'TEST2',(select count(1) from test2 where a.table_name='TEST2'),
'TEST3',(select count(1) from test3 where a.table_name='TEST3'),
'TEST4',(select count(1) from test4 where a.table_name='TEST4'),
'TEST5',(select count(1) from test5 where a.table_name='TEST5'),
'TEST6',(select count(1) from test6 where a.table_name='TEST6'),
'TEST7',(select count(1) from test7 where a.table_name='TEST7'),
'TEST8',(select count(1) from test8 where a.table_name='TEST8'),
'TEST9',(select count(1) from test9 where a.table_name='TEST9'),0)
from user_tables a
where table_name like 'TEST%' order by 1;
其实就是查看user_tables表里的行数 和实际表中行数的对比,但出来的结果为啥不一样啊
如下图所示

------解决方案--------------------
要先执行一下 :
ANALYZE TABLE table_name COMPUTE STATISTICS;
------解决方案--------------------
数据库自动收集优化程序一般会自动统计数据,统计之后才会有num_rows。你这个是因为还没运行统计数据的程序DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC,该程序默认22:00启动,分析整个数据库,当然你也可以关闭它,以免影响数据库的性能。你可以手动调用DBMS_STATS包中的程序来分析某个表或者某个表空间,分析之后,num_rows应该就有值了。不过该值是基于分析的那个时点计算出来的,当表有变化且未启动下一次分析时,数据就不准确了