Step 2: Create the Baselining Procedure

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;