Oracle DB:SELECT可能な全テーブルのレコード件数を取得する(SQL*Plus)

SELECT可能な全テーブルのレコード件数を取得するプロシージャを作りました。本当に全てのテーブルだと、見たくもないテーブルもたくさんヒットするため、テーブルのオーナーを指定します。

(0)前準備

SQLPlusでメッセージ出力するために“SERVEROUTPUT”を“ON”にします。

SQL> SET SERVEROUTPUT ON

(1)SELECT可能な全テーブルのレコード件数を取得する

-- SELECT可能な全テーブルのレコード件数を取得する
DECLARE
    -- 定数
    cOWNER VARCHAR2(30) := 'IKUYANI'; -- オーナー
    cDELIM VARCHAR2(10) := CHR(9); -- 区切り文字

    -- 変数
    vCOUNT NUMBER(12); -- テーブルの件数を格納

BEGIN

    DBMS_OUTPUT.PUT_LINE('テーブル名' || cDELIM || '件数');

    FOR TABLE_REC IN (
        SELECT OWNER, OBJECT_NAME FROM ALL_OBJECTS
        WHERE OWNER LIKE cOWNER AND OBJECT_TYPE IN ('TABLE')
        ORDER BY OBJECT_NAME
    )
    LOOP
        EXECUTE IMMEDIATE
            'SELECT COUNT(1) FROM ' || TABLE_REC.OWNER || '.' || TABLE_REC.OBJECT_NAME
            INTO vCOUNT;
        DBMS_OUTPUT.PUT_LINE(TABLE_REC.OBJECT_NAME || cDELIM || vCOUNT);
    END LOOP;
END;
/