You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Oracle SQL Developer编写SQL查询显示所有表及行数的方法

在Oracle SQL Developer中查询所有表及对应行数的方法

嘿,这个需求在日常数据库操作里挺常见的,我给你分享两种靠谱的实现方式,在Oracle SQL Developer里直接就能用:

方法一:利用系统视图快速获取(基于统计信息)

Oracle自带的系统视图里存储了表的基础元数据,其中num_rows字段记录了表的行数——不过要注意,这个数值是基于最近一次收集的统计信息,并非实时数据。如果你的数据库定期更新统计信息,这个方法速度极快,适合快速做表信息盘点。

根据你需要查询的范围,选对应的视图就行:

  • user_tables:仅显示当前登录用户拥有的表
  • all_tables:显示当前用户有权限访问的所有表
  • dba_tables:显示数据库中所有表(需要DBA权限)

举个查询当前用户表的例子:

SELECT table_name, num_rows
FROM user_tables
ORDER BY table_name;

如果要查所有有权限的表,加上用户(owner)字段会更清晰:

SELECT owner, table_name, num_rows
FROM all_tables
ORDER BY owner, table_name;

要是觉得num_rows的数据不够新,可以执行命令更新统计信息(需要对应权限):

-- 更新单张表的统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('你的用户名', '目标表名');
-- 更新当前用户所有表的统计信息
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('你的用户名');

方法二:实时计算行数(精准但耗时)

如果需要绝对实时、精准的行数,就得对每个表执行COUNT(*)。这种方法对大数据表会比较慢,但结果完全准确。

用下面的SQL就能实现(以当前用户表为例):

SELECT 
    table_name,
    TO_NUMBER(
        EXTRACTVALUE(
            DBMS_XMLGEN.GETXMLTYPE('SELECT COUNT(*) AS row_count FROM ' || table_name),
            '/ROWSET/ROW/ROW_COUNT'
        )
    ) AS real_time_row_count
FROM user_tables
ORDER BY table_name;

小提醒

  • 要是查询其他用户的表,记得在表名前加上用户名,比如把'SELECT COUNT(*) FROM ' || table_name改成'SELECT COUNT(*) FROM ' || owner || '.' || table_name,同时确保你有该表的查询权限。
  • 大数据表用方法二会消耗较多数据库资源,建议在业务低峰期执行。

内容的提问来源于stack exchange,提问作者Trendy Cloud

火山引擎 最新活动