実行したSQLのSQL_IDが知りたいシーンってよくありますよね。おそらくほとんどの人は「SQLテキストの中にコメントとしてキーワードを埋め込んだ状態で実行しV$SQLを検索」する方法ではないでしょうか。けっこう泥臭いですよね。今回はこれ以外の方法で取得できる方法を2つ紹介します。
18c以降のバージョン限定
18c以降のバージョンでかつSQL*PlusおよびSQLcl限定とはなりますが、SQL実行前にset でシステム変数を設定する事で出力されるようになります。一つ注意点あります。SQL*PlusでSQL実効する場合セミコロン「;」のつける位置によって変化します。最後の改行(SQLclの場合は変化ありません)
set feedback on sql_id
set feedback on sql_id
バージョン問わず可能なお手軽な方法
こちらも SQL*PlusおよびSQLcl限定 になりますが、こんな方法もあります。v$sessionのprev_sqlは「そのセッションで最後に実行されたSQL_ID」が設定されています。これを使う事で取得できます。
条件として正常に終了したSQLでないと「前回実行したSQL」として認められません。大量件数を取得するようなSELECTにおいて途中で停止してしまうと(全てfetchしないとだめです)前回実行SQLとされないので注意です。
select prev_sql_id from v$session where sid = sys_context('USERENV','SID')
;
select prev_sql_id from v$session where sid = sys_context('USERENV','SID')
;