CREATE OR REPLACE PROCEDURE log_sql_baseline(p_sql_id IN VARCHAR2) AS
BEGIN
INSERT INTO sql_baseline_log (
sql_id, plan_hash_value, executions,
total_elapsed_s, avg_elapsed_s,
rows_processed, avg_rows,
buffer_gets, avg_buffer_gets,
disk_reads, avg_disk_reads
)
SELECT
sql_id,
plan_hash_value,
executions,
ROUND(elapsed_time / 1e6, 2),
ROUND(elapsed_time / 1e6 / NULLIF(executions, 0), 2),
rows_processed,
ROUND(rows_processed / NULLIF(executions, 0)),
buffer_gets,
ROUND(buffer_gets / NULLIF(executions, 0)),
disk_reads,
ROUND(disk_reads / NULLIF(executions, 0))
FROM
gv$sql
WHERE
sql_id = p_sql_id
ORDER BY
last_active_time DESC
FETCH FIRST 1 ROWS ONLY;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Baseline logging failed: ' || SQLERRM);
END;