SQL*Plusを使わずに統計情報を取得する

SQL*Plus Autotraceの機能で統計情報が取得できますが、これをSQL*Plusを使わずにやる方法です。

SELECT SN.name, ST.value
FROM V$SESSION S, V$SESSTAT ST, V$STATNAME SN
WHERE AUDSID=userenv('SESSIONID')
AND S.sid = ST.sid
AND SN.statistic#=ST.statistic#
AND SN.name in ('recursive calls', 'db block gets', 'consistent gets', 'physical reads'
    ,'redo size', 'bytes sent via SQL*Net to client', 'bytes received via SQL*Net from client'
    ,'SQL*Net roundtrips to/from client', 'sorts (memory)', 'sorts (disk)', 'rows processed')

このSQLで、統計情報の項目がゲットできます。しかし、セッションがスタートしてからの累積値なので、自身のSQL統計情報も加算されてしまいます。
このため、目的のSQL(A)と統計情報を取得するSQL(B)のセッションは分けます。

こんな感じ

  1. セッションAでAUDSIDを取得する。
  2. セッションBでセッションAの統計情報を取得する。
  3. セッションAで目的のSQLを発行する。fetchも行う。
  4. セッションBでセッションAの統計情報を取得し、(4)-(2)で統計情報の差分をとる。