SQL*Plus now can provide you the SQL_ID of the last statement executed in your own session with SET FEEDBACK SQL_ID.
A quick demo :
SQL> set feedback on sql_id SQL> select count(*) from my_target where factory='SYS'; COUNT(*) ---------- 52217 1 row selected. SQL_ID: g1mk14hdxc1ww SQL> select * from table(dbms_xplan.display_cursor('g1mk14hdxc1ww')); PLAN_TABLE_OUTPUT ------------------------------------------------------------------------------------------------------------------------------------ SQL_ID g1mk14hdxc1ww, child number 0 ------------------------------------- select count(*) from my_target where factory='SYS' Plan hash value: 1690349505 ----------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ----------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 6 (100)| | | 1 | SORT AGGREGATE | | 1 | 5 | | | |* 2 | INDEX RANGE SCAN| MY_TARGET_NDX | 2683 | 13415 | 6 (0)| 00:00:01 | ----------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("FACTORY"='SYS') 19 rows selected. SQL_ID: 5dyyqqwuyu01v SQL>
After I executed my query against the "my_target" table, SQL*Plus provided my the SQL_ID ("g1mk14hdxc1ww"). I could then immediately get the Execution Plan for the statement, without having to query for the SQL_ID in V$SQL or V$SQLAREA.
This demonstration is with SQL*Plus 19.0 against a 19c Database. (I think "set feedback on sql_id" was introduced in SQL*Plus 18)