找出共享池中sql的绑定变量值!

之前有一个朋友给我说,他在数据库中找出来的sql就是有绑定变量的,没有具体的参数值。这里记录一下:

首先用session 1来跟新一行,不提交:

SQL> update test set name='李四' where id=2 and name='张三';

已更新 1 行。

下面用session 2来更新同一行,这样就会阻塞:

SQL> select sid from v$mystat where rownum=1;
       SID
----------
        19
        
SQL> variable v_id number;
SQL> variable v_name varchar2(10);
SQL> exec :v_id := 2;
PL/SQL 过程已成功完成。

SQL> exec :v_name :='张三';
PL/SQL 过程已成功完成。

SQL> update test set name='李四' where id=:v_id and name=:v_name;

在session 3 中来查看session 2 的sql 的绑定变量值:

SQL> select t.SID,t.BLOCKING_SESSION,t.STATUS,t.EVENT,t.SQL_ID from v$session t where sid=19;

       SID BLOCKING_SESSION STATUS   EVENT                                              SQL_ID
---------- ---------------- -------- -------------------------------------------------- -------------
        19               10 ACTIVE   enq: TX - row lock contention                      02pf8u9yxqy25

SQL> select sql_text from v$sqlarea where sql_id = '02pf8u9yxqy25';

SQL_TEXT
--------------------------------------------------------------------------------
update test set name='李四' where id=:v_id and name=:v_name

SQL> select name,value_string from v$sql_bind_capture where sql_id = '02pf8u9yxqy25';

NAME                                                         VALUE_STRING
------------------------------------------------------------ ---------------
:V_ID                                                        2
:V_NAME                                                      张三



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值