来自v$sql中的信息
测试两个变量的情况(实际可以看6个,可根据需要修改)
DROP TABLE T1 PURGE;
CREATE TABLE T1 AS SELECT A.*,SYSDATE RIQI FROM DBA_USERS A ORDER BY 1;
var mc char(3);
var id number;
exec :mc:='SYS';
exec :id:=50;
set linesize 80 pagesize 1000
col username for a20
select distinct user_id,username from t1 where username=:mc or user_id=:id;
select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
sql_id 和执行计划如下
解析
set linesize 200 pagesize 1000
col BIND_DATA1 for a20
col BIND_DATA2 for a20
col BIND_DATA3 for a10
col BIND_DATA4 for a10
col BIND_DATA5 for a10
col BIND_DATA6 for a10
col SQL_TEXT for a30
SELECT SQL_ID
,substr(SQL_TEXT,1,30) sql_text
--,LITERAL_HASH_VALUE
,HASH_VALUE
,DBMS_SQLTUNE.EXTRACT_BIND(BIND_DATA,1).VALUE_STRING BIND_DATA1
,DBMS_SQLTUNE.EXTRACT_BIND(BIND_DATA,2).VALUE_STRING BIND_DATA2
,DBMS_SQLTUNE.EXTRACT_BIND(BIND_DATA,3).VALUE_STRING BIND_DATA3
,DBMS_SQLTUNE.EXTRACT_BIND(BIND_DATA,4).VALUE_STRING BIND_DATA4
,DBMS_SQLTUNE.EXTRACT_BIND(BIND_DATA,5).VALUE_STRING BIND_DATA5
,DBMS_SQLTUNE.EXTRACT_BIND(BIND_DATA,6).VALUE_STRING BIND_DATA6
FROM V$SQL
WHERE SQL_ID='&sql_id';
看到当前两个绑定变量的值是SYS 和50。
当用户修改变量后再执行时可能捕获不到,绑定变量并不会全部记录,而是采样方式记录,受_cursor_bind_capture_interval隐含参数控制
默认是900秒捕获一次。
如果清理执行计划,重新执行(发生了硬解析)
则会更新