トップページに戻る    次の豆知識へ    前の豆知識へ

豆知識19 実行したSQLを動的パフォーマンスビューから取得

--実行したSQL
select /*123456789 (SQLID)*/
TABLE_NAME,COMMENTS
  from dict;


--■■■SQLPlusでClob型を見る場合や、SQLDeveloperかPL/SQLDeveloperでClob型を見る場合■■■ set long 99999 set pages 0 select SQL_FullText, to_char(Last_Active_Time,'YYYY-MM-DD HH24:MI:SS') as "最終アクティブ日時", DBMS_LOB.GetLength(SQL_FullText) AS "SQL文の長さ" from V$SQL where Last_Active_Time >= trunc(sysdate) and InStr(SQL_Text,'123456789 (SQLID)') > 0 --抽出条件 and InStr(SQL_Text,'除外条件') = 0 --除外条件 order by "最終アクティブ日時" desc; --■■■SQLPlusに、実行したSQL文を出力(SQLなので4000バイト以下のSQLのみ取得可)■■■ select ListAgg(b.SQL_Text) WithIn Group(order by b.Piece) as AggSQLText, to_char(max(a.Last_Active_Time),'YYYY-MM-DD HH24:MI:SS') as "最終アクティブ日時" from V$SQL a Join V$SQLText b on a.SQL_ID = b.SQL_ID where a.Last_Active_Time >= trunc(sysdate) and InStr(a.SQL_Text,'123456789 (SQLID)') > 0 --抽出条件 and InStr(a.SQL_Text,'除外条件') = 0 --除外条件 group by a.SQL_ID order by "最終アクティブ日時" desc; --■■■SQLPlusに、実行したSQL文を出力(PL/SQLなので32767バイト以下のSQLのみ取得可)■■■ begin DBMS_OUTPUT.ENABLE(1000000); for rec in ( select SQL_FULLText, to_char(Last_Active_Time,'YYYY-MM-DD HH24:MI:SS') as "最終アクティブ日時" from V$SQL where Last_Active_Time >= trunc(sysdate) and InStr(SQL_Text,'123456789 (SQLID)') > 0 --抽出条件 and InStr(SQL_Text,'除外条件') = 0 --除外条件 order by "最終アクティブ日時" desc) Loop DBMS_Output.Put_Line('■■■■■■■■■■■■■■■■■■'); DBMS_Output.Put_Line('最終アクティブ日時=' || rec.最終アクティブ日時); DBMS_Output.Put_Line(to_char(rec.SQL_FullText)); end Loop; end; /