我需要以下面的格式找出大量表格的数量(例如:40,50个表格),我将提供表格集(作为参数或表格列表)。
换句话说,我需要为用户定义的表集找到如下表的计数。
TABLE_NAME : ROW_COUNT
table_a : 1000000
table_b : 200000
table_c : 450000
table_d : 80000
等。
1。)sql developer或toad或任何其他工具中是否有内置选项可以立即计算多个表?
2。)是否有一个sql语句或pl / sql脚本,我可以在输出之上?
注意:请注意,我不想获取架构中所有表的计数。我只想要特定的表格列表。例如:假设架构中有100个表,但我只想要提到的25个表的数量
答案 0 :(得分:1)
这样的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
包收集有关该表的统计信息时。