绑定变量与非绑定变量sql的查询

一直对v$sql里的extract_matching_signature与force_matching_signature理解不是很好理解,今天就自已手动操作理解一下。可能有些东西理解错了,希望大家指出,谢谢! 
exact_matching_signature  :          对SQL语句,去掉重复的空格(不包括字符常量),将大小写转换成相同,比如均为大写(不包括字符常量)后,如果 SQL相同,那么SQL语句的exact_matching_signature就是相同的



force_matching_signature  :

         对SQL语句,去掉重复的空格(不包括字符常量),将大小写 转换成相同,比如均为大写(不包括字符常量),然后去掉SQL中的常量,如果SQL相同,那么SQL语句的 force_matching_signature就是相同的。





理解:

把大小写换成相同、去掉重复空格的sql , 生成exact_matching_signature 值。如果sql相同,
exact_matching_signature 相同

把大小写换成相同、去掉重复空格的、常量去掉的sql , 生成的force_matching_signature  值。如果sql相同,force_matching_signature相同。



-------------------------------------------------------------------------------------------------------------------------------

sql                                                      exact_matching_signature                   force_matching_signature                         

select  1 from a where   a=1                   select  1 from a where   a=1select  1 from a where   a=

select  1 from a where   a=2                   select  1 from a where   a=2select  1 from a where   a=

select  1 from a where   a=$a                 select  1 from a where   a=$aselect  1 from a where   a=$a


所以

   当sql的exact_matching_signature != force_matching_signature 是常量

   当sql的exact_matching_signature  = force_matching_signature 是绑定变量



e.g : 运行以下三句话

1、select *  from qn where qn = 2

2、select *  from qn where qn = 3

3、select *  from qn where qn = 4

4、var a number ;

  exec:a:=2;

  select * from qn where qn :=a;

得出结果:

SQL> select sql_text ,sql_id ,exact_matching_signature,force_matching_signature from v$sql where sql_text like 'select * from qn where qn%' ;

        SQL_TEXT                SQL_ID                      EXACT_MATCHING_SIGNATURE            FORCE_MATCHING_SIGNATURE
----------------------------------- -------------------------- -------------------------------------- --------------------------------------
select * from qn where qn = 3        fra23zt3swas9                  4687974134679845652                1883240159772388027
select * from qn where qn = 2        f843wpp30tqu2               11642415946286633796               1883240159772388027
select * from qn where qn = 4        cb58443fj9sx0                 11673520259659889340                1883240159772388027
select * from qn where qn =  :a     1kyu6y4t0rkq1                  5895873948142166777               5895873948142166777

结论:

非绑定变量的sql :

  非绑定变量的sql ,sql_id不一样, exact_matching_signature 值也不一样。 force_matching_signature 值是相同。

  通过 force_matching_signature 可以找到相同的语句的非绑定变量的sql。

  非绑定变量sql exact_matching_signature  != force_matching_signature



绑定变量的sql :

  绑定变量的sql的exact_matching_signature,force_matching_signature  与 非绑定变量的sql不一样。

  绑定变量的exact_matching_signature = force_matching_signature
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值