如何从oracle数据库中获取多个表的计数?

时间:2017-10-21 07:09:16

标签: sql database oracle plsql count

我需要以下面的格式找出大量表格的数量(例如: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个表的数量

1 个答案:

答案 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包收集有关该表的统计信息时。