有好长一段时间没有发表过任何文章,主要是近期工作都没有做与ORACLE相关的事宜。今天正好有一些时间,记录一个技巧性的SQL语句。
我们通常在想找一个SQL中包含的绑定变量值时,10046是条件反射的一个操作。不过有的时候,我们希望知道一个已经存在的硬解析到底运用了什么绑定变量进行执行计划生成。可能就需要以下的命令进行查询:
ZHONG@ zhongpdb SQL>var p1 number;
ZHONG@ zhongpdb SQL>begin
2 :p1 := 2300;
3 end;
4 /
PL/SQL 过程已成功完成。
ZHONG@ zhongpdb SQL>select count(*) from t1 where object_id > :p1 ;
COUNT(*)
----------
68839
ZHONG@ zhongpdb SQL>col sql_text format a80
ZHONG@ zhongpdb SQL>SELECT sql_id, child_number , sql_text FROM v$sql WHERE LOWER(sql_text) LIKE '&SQLTEXT';
输入 sqltext 的值: select count(*) from t1%
原值 1: SELECT sql_id, child_number , sql_text FROM v$sql WHERE LOWER(sql_text) LIKE '&SQLTEXT'
新值 1: SELECT sql_id, child_number , sql_text FROM v$sql WHERE LOWER(sql_text) LIKE 'select count(*) from t1%'
SQL_ID CHILD_NUMBER SQL_TEXT
------------- ------------ --------------------------------------------------------------------------------
2zbp0v9dgsrru 0 select count(*) from t1 where object_id > :p1
ZHONG@ zhongpdb SQL>SELECT name
2 , position
3 , datatype_string
4 , was_captured
5 , value_string
6 FROM v$sql_bind_capture
7 WHERE sql_id = '&SQLID';
输入 sqlid 的值: 2zbp0v9dgsrru
原值 7: WHERE sql_id = '&SQLID'
新值 7: WHERE sql_id = '2zbp0v9dgsrru'
NAME POSITION DATATYPE_STRING WAS
------------------------------------------------------------ ---------- ------------------------------ ---
VALUE_STRING
-------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------
:P1 1 NUMBER YES
2300
此方法只能对第一次硬解析时有效,软解析无法截获变量信息!
我们通常在想找一个SQL中包含的绑定变量值时,10046是条件反射的一个操作。不过有的时候,我们希望知道一个已经存在的硬解析到底运用了什么绑定变量进行执行计划生成。可能就需要以下的命令进行查询:
ZHONG@ zhongpdb SQL>var p1 number;
ZHONG@ zhongpdb SQL>begin
2 :p1 := 2300;
3 end;
4 /
PL/SQL 过程已成功完成。
ZHONG@ zhongpdb SQL>select count(*) from t1 where object_id > :p1 ;
COUNT(*)
----------
68839
ZHONG@ zhongpdb SQL>col sql_text format a80
ZHONG@ zhongpdb SQL>SELECT sql_id, child_number , sql_text FROM v$sql WHERE LOWER(sql_text) LIKE '&SQLTEXT';
输入 sqltext 的值: select count(*) from t1%
原值 1: SELECT sql_id, child_number , sql_text FROM v$sql WHERE LOWER(sql_text) LIKE '&SQLTEXT'
新值 1: SELECT sql_id, child_number , sql_text FROM v$sql WHERE LOWER(sql_text) LIKE 'select count(*) from t1%'
SQL_ID CHILD_NUMBER SQL_TEXT
------------- ------------ --------------------------------------------------------------------------------
2zbp0v9dgsrru 0 select count(*) from t1 where object_id > :p1
ZHONG@ zhongpdb SQL>SELECT name
2 , position
3 , datatype_string
4 , was_captured
5 , value_string
6 FROM v$sql_bind_capture
7 WHERE sql_id = '&SQLID';
输入 sqlid 的值: 2zbp0v9dgsrru
原值 7: WHERE sql_id = '&SQLID'
新值 7: WHERE sql_id = '2zbp0v9dgsrru'
NAME POSITION DATATYPE_STRING WAS
------------------------------------------------------------ ---------- ------------------------------ ---
VALUE_STRING
-------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------
:P1 1 NUMBER YES
2300
此方法只能对第一次硬解析时有效,软解析无法截获变量信息!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12974804/viewspace-763141/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12974804/viewspace-763141/