查询绑定变量的值

有好长一段时间没有发表过任何文章,主要是近期工作都没有做与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


此方法只能对第一次硬解析时有效,软解析无法截获变量信息!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12974804/viewspace-763141/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12974804/viewspace-763141/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值