ねもぷらす

ふぁいんでぃんぐねもの日記。プログラミングとか育児とか

全テーブルのレコード数を取得する

http://forums.oracle.com/forums/thread.jspa?messageID=1794280#1794280

SELECT
  table_name,
  TO_NUMBER(
    EXTRACTVALUE(
      xmltype(
        dbms_xmlgen.getxml('SELECT COUNT(*) AS C FROM '||table_name)
      ),
      '/ROWSET/ROW/C'
    )
  ) AS count
FROM user_tables;

以下のような流れで全テーブルに対して SQL を発行できる。

  1. user_tables からテーブル一覧を取得(SELECT table_name FROM user_tables)
  2. 取得したテーブル名を条件に加えて各テーブルのカウントを取得('SELECT COUNT(*) AS C FROM '||table_name)
  3. DBMS_XMLGENパッケージ getxml 関数が ↑の結果を XML 形式に変換
  4. SQL関数extractValue (x, 'path') を使って、↑で作成したXML DB 内の '/ROWSET/ROW/C' にセットされたカウント数を取得
  5. ↑を TO_NUMBER で明示的に数値に変換。


Oracle だとこんな書き方ができるのか…PostgreSQLMySQL はどう書けるかな?