暂无图片
Oracle 统计各个表记录数的查询语句,非存储过程触发器的语句怎么写?
我来答
分享
暂无图片 匿名用户
Oracle 统计各个表记录数的查询语句,非存储过程触发器的语句怎么写?

Oracle 统计各个表记录数的查询语句,非存储过程触发器的语句怎么写?

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
吾亦可往

可以使用以下语句查询Oracle数据库中各个表的记录数:

        

SELECT table_name, num_rows FROM user_tables;

其中,user_tables是Oracle系统表,存储了当前用户所拥有的所有表的信息。该语句会返回每个表的名称和记录数。如果需要查询其他用户的表,可以使用all_tablesdba_tables等视图。

需要注意的是,上述语句只能查询当前用户所拥有的表的记录数,如果需要查询其他用户的表,需要使用相应的权限或连接到相应的用户。

暂无图片 评论
暂无图片 有用 6
PiscesCanon

楼上说的num_rows有一个问题,这个值并不准确。


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


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


而大多数情况下,自动收集统计信息这个动作也不是每时每刻的,这更会导致num_rows不准确,而且自动收集也不是每个表都收集,默认11g下变化超过10%的表才会被收集。

暂无图片 评论
暂无图片 有用 0
Thomas

dba_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
广州_老虎刘

下面这个sql需要在12c及以上版本执行,如果低于12c, 需要先创建函数, 再执行最后的select即可:


暂无图片 评论
暂无图片 有用 1
飞天
2023-08-13
学习了,厉害
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏