Top/Oracle/テーブル一覧を件数と同時に表示するSQL

Oracle/テーブル一覧を件数と同時に表示するSQL のバックアップの現在との差分(No.3)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
//Oracle/テーブル一覧を件数と同時に表示するSQL
テーブル一覧を件数と同時に表示するSQLは以下の通りです。COUNT()を利用しないと件数が取れないので、SQL1本では取得できないためPL/SQLで解決します。
テーブル一覧を件数と同時に表示するSQLは以下の通りです。

*目次
#contents()

*SQL版
SELECT文で書く場合は、以下のようになります。
 SELECT
     TABLE_NAME,
     TO_NUMBER(
       EXTRACTVALUE(
         XMLTYPE(
           DBMS_XMLGEN.GETXML('SELECT COUNT(*) C FROM '||TABLE_NAME))
           ,'/ROWSET/ROW/C')) COUNT
 FROM USER_TABLES
 WHERE TABLE_NAME NOT LIKE 'BIN$%'
 AND (IOT_TYPE != 'IOT_OVERFLOW' OR IOT_TYPE IS NULL)
 ORDER BY TABLE_NAME
 ;

*PL/SQL版
PL/SQLが利用できる場合、以下のように書いてもOKです。
 DECLARE
     NUM_COUNT NUMBER;
 BEGIN
     FOR CUR IN (SELECT * FROM USER_TABLES) LOOP
         EXECUTE IMMEDIATE 'SELECT COUNT(*) INTO :NUM_COUNT FROM ' ||
         CUR.TABLE_NAME INTO NUM_COUNT;
         DBMS_OUTPUT.PUT_LINE(
         CUR.TABLE_NAME || ' : ' || NUM_COUNT || '件');
     END LOOP;
 END;
 /


Analyze直後であれば、NUM_ROWSに値が入ってくるので以下のSQLでも抽出可能です。

*Analyze直後の場合
Analyze直後であれば、NUM_ROWSに値が入っているので、以下のSELECT文でも抽出可能です。
 SELECT T.TABLE_NAME, T.NUM_ROWS , C.COMMENTS
 FROM USER_TABLES T, USER_TAB_COMMENTS C
 WHERE C.TABLE_NAME(+)=T.TABLE_NAME
 ORDER BY T.TABLE_NAME
 ;

ページ新規作成

新しいページはこちらから投稿できます。

TOP