全テーブルのレコード数を取得する
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 を発行できる。
- user_tables からテーブル一覧を取得(SELECT table_name FROM user_tables)
- 取得したテーブル名を条件に加えて各テーブルのカウントを取得('SELECT COUNT(*) AS C FROM '||table_name)
- DBMS_XMLGENパッケージ getxml 関数が ↑の結果を XML 形式に変換
- SQL関数extractValue (x, 'path') を使って、↑で作成したXML DB 内の '/ROWSET/ROW/C' にセットされたカウント数を取得
- ↑を TO_NUMBER で明示的に数値に変換。
Oracle だとこんな書き方ができるのか…PostgreSQL、MySQL はどう書けるかな?