匿名用户Oracle 统计各个表记录数的查询语句,非存储过程触发器的语句怎么写?
Oracle 统计各个表记录数的查询语句,非存储过程触发器的语句怎么写?
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
4条回答
默认
最新
可以使用以下语句查询Oracle数据库中各个表的记录数:
SELECT table_name, num_rows FROM user_tables;
其中,user_tables是Oracle系统表,存储了当前用户所拥有的所有表的信息。该语句会返回每个表的名称和记录数。如果需要查询其他用户的表,可以使用all_tables或dba_tables等视图。
需要注意的是,上述语句只能查询当前用户所拥有的表的记录数,如果需要查询其他用户的表,需要使用相应的权限或连接到相应的用户。
评论
有用 6采纳答案后不可修改和取消
楼上说的num_rows有一个问题,这个值并不准确。

这个值是由统计信息决定,而收集统计信息如果不是按照100%的采样率来收集,那也可能是不准确的。

当100%采样率才是准确的。

而大多数情况下,自动收集统计信息这个动作也不是每时每刻的,这更会导致num_rows不准确,而且自动收集也不是每个表都收集,默认11g下变化超过10%的表才会被收集。
评论
有用 0dba_tables 里的num_rows并不经确,它是收集统计信息时刷新的,并不能代表该表当前记录数。如果一定要用SQL而非PROCEDURE的方法解决,可以运行下面语句,生成获取每个表记录数的SQL, 之后运行这些SQL即可:
select 'select '''||''||table_name||''||''' as table_name, (select count(*) from '||table_name||') as ct from dual;' from user_tables;
评论
有用 0回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏


