2017-10-21 133 views
0

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

回答

1

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软件包收集表中的统计数据时,才会填充 。

+1

为什么不从USER_TABLES中选择?此外'分析'已被弃用超过十年:始终[使用'DBMS_STATS'包](https://docs.oracle.com/cloud/latest/db121/ARPLS/d_stats.htm)。 – APC

+0

在哪里指定表列表? –

+0

在“where”条款中。 –