如何从oracle数据库中获得多个表的计数?
问题描述:
我需要找到以下格式的大量表格(例如:40,50个表格)的计数,我将提供表格集(作为参数或表格列表)。如何从oracle数据库中获得多个表的计数?
换句话说,我需要为用户定义的表集找出如下表的计数。
TABLE_NAME : ROW_COUNT
table_a : 1000000
table_b : 200000
table_c : 450000
table_d : 80000
等。
1)是否有SQL开发人员或蟾蜍或任何其他工具来获得立竿见影多个表的计数内置的选项?
2.)是否有一个sql语句或pl/sql脚本,我可以得到以上输出?
注意:请注意,我不想获取模式中所有表的计数。我只想要特定的表格列表。例如:可以说在模式中有100个表格,但我只想要提到的25个表格的数量
答
A PL/SQL
这样的模块可以工作。使用EXECUTE IMMEDIATE
动态执行从ALL_TABLES
获取表名形成一个查询字符串,
DECLARE
V_YOUR_SCHEMA VARCHAR2(30) ;
V_COUNT NUMBER;
BEGIN
V_YOUR_SCHEMA :='SCHEMA_NAME';
FOR L_TABLE_NAME IN (SELECT TABLE_NAME FROM ALL_TABLES WHERE SCHEMA_NAME = v_YOUR_SCHEMA)
LOOP
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || v_YOUR_SCHEMA ||'.' ||L_TABLE_NAME INTO V_COUNT;
DBMS_OUTPUT.PUT_LINE(L_TABLE_NAME||' : '||V_COUNT);
END LOOP;
END;
/
片段的表名的定义列表:
DECLARE
V_YOUR_SCHEMA VARCHAR2(30) ;
V_COUNT NUMBER;
V_TABLE_LIST DBMS_SQL.VARCHAR2_TABLE;
TYPE V_LIST_TYPE is VARRAY(50) of VARCHAR2(30);
BEGIN
V_YOUR_SCHEMA :='SCHEMA_NAME';
V_TABLE_LIST V_LIST_TYPE := V_LIST_TYPE('TABLE1', 'TABLE2', 'TABLE3');
FOR L_ITER IN 1..V_TABLE_LIST.COUNT
LOOP
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || v_YOUR_SCHEMA ||'.' ||V_TABLE_LIST(L_ITER) INTO V_COUNT;
DBMS_OUTPUT.PUT_LINE(V_TABLE_LIST(L_ITER)||' : '||V_COUNT);
END LOOP;
END;
/
注:查看
ALL_TABLES
也有一栏num_rows
,仅当您使用DBMS_STATS
软件包收集表中的统计数据时,才会填充 。
为什么不从USER_TABLES中选择?此外'分析'已被弃用超过十年:始终[使用'DBMS_STATS'包](https://docs.oracle.com/cloud/latest/db121/ARPLS/d_stats.htm)。 – APC
在哪里指定表列表? –
在“where”条款中。 –