Files
oracle/vg/sql_binds.sql
2026-03-12 21:23:47 +01:00

123 lines
4.5 KiB
SQL

@@header
/*
*
* Author : Vishal Gupta
* Purpose : Display SQL Binds from SQLArea
* Version : 10.2 and above
* Parameters : 1 - SQL_ID
* 2 - Hours (Default 72 hours)
*
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 27-Aug-15 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE sql_id
UNDEFINE hours
DEFINE sql_id="&&1"
DEFINE hours="&&3"
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
COLUMN _hours NEW_VALUE HOURS NOPRINT
set term off
SELECT DECODE('&&sql_id','%','%','') "_force_matching_signature"
, DECODE('&&hours','','72','&&hours') "_hours"
FROM DUAL;
set term on
/************************************
* MAIN Section
************************************/
DEFINE force_matching_signature=""
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
set term off
set numf 99999999999999999999999
select to_char(sql.force_matching_signature) "_force_matching_signature"
from gv$sqlstats sql
where sql.sql_id = '&&sql_id'
and rownum <= 1;
set term on
PROMPT **************************************************************
PROMPT * SQL Bind Values from SQL Area
PROMPT * (Force Matching Signature = '&&force_matching_signature')
PROMPT *
PROMPT * Input Parameters
PROMPT * - SQL Id = '&&sql_id'
PROMPT * - Hours = '&&hours'
PROMPT **************************************************************
COLUMN first_load_time HEADING "First Load Time" FORMAT a20
COLUMN last_active_time HEADING "Last Active Time" FORMAT a20
COLUMN instance_number HEADING "I#" FORMAT 99
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
COLUMN bind_values HEADING "Bind Values" FORMAT a100
COLUMN bind_datatype HEADING "Bind DataType" FORMAT a80
SELECT TO_CHAR(TO_DATE(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'),'DD-MON-YYYY HH24:MI:SS') first_load_time
, TO_CHAR(ss.last_active_time,'DD-MON-YYYY HH24:MI:SS') last_active_time
, ss.inst_id instance_number
, ss.sql_id
, ss.plan_hash_value
, (select listagg(NVL(name,':B' || position)
||'['
|| datatype_string || NVL2(scale
,'(' || scale || NVL2(precision
,','|| precision
, ''
) || ')'
,''
)
|| ']'
||'='
|| CASE
WHEN datatype_string <> 'TIMESTAMP' THEN NVL(value_string,'NULL')
ELSE TO_CHAR(ANYDATA.ACCESStimestamp(VALUE_ANYDATA))
END
,','
) WITHIN GROUP (order by position)
from table(dbms_sqltune.extract_binds(sql.BIND_DATA))
) bind_values
/*
, (select listagg(NVL(name,':B' || position) || '='
|| datatype_string || NVL2(scale,'(' || scale || NVL2(precision,','|| precision, '') || ')' ,'' )
,','
) WITHIN GROUP (order by position)
from table(dbms_sqltune.extract_binds(sql.BIND_DATA))
) bind_datatype
*/
from gv$sqlstats ss
, gv$sqlarea sql
where ss.inst_id = sql.inst_id (+)
AND ss.sql_id = sql.sql_id (+)
AND ss.plan_hash_value = sql.plan_hash_value (+)
AND ss.sql_id LIKE CASE ss.force_matching_signature
WHEN 0 THEN '&&sql_id'
ELSE '%'
END
AND ss.force_matching_signature = '&&force_matching_signature'
AND ss.last_active_time > sysdate - (&&hours/24)
order by ss.last_active_time
, ss.inst_id
;
@@footer