暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
如何得到SQL中的绑定变量值
911
8页
36次
2020-06-10
免费下载
概述:
Oracle数据库里的SQL优化绝大多数都可以归结为对目标SQL执行计划的调整,所以在
Oracle数据库里做SQL优化时通常会做的第一件事情就是查看目标SQL真实的执行计划。
当目标SQL使用了绑定变量时,我们就必须想办法得到这些目标SQL中绑定变量的实际输入
值。
获得绑定变量相关视图:
v$sql_bind_capture(如果查不到,那么有可能对应的SharedCursor已经被ageoutShared
pool
dba_hist_sqlstatdbs_hist_sqlbind(如果已经被ageoutsharedpool可以查询这两个视
图)
满足如下两个条件之一,则该SQL中的绑定变量的具体输入值就会被Oracle捕获,并可以通过
v$sql_bind_capture查询:
①当含有绑定变量的目标SQL以硬解析的方式被执行时。
②当含有绑定变量的目标SQL以软解析/软软解析的方式重复执行时,该SQL中的绑定变量的
具体输入值也可能会被Oracle捕获,只不过默认情况下这种捕获oracle至少得间隔15分钟才会做
一次。
注意事项:
Oracle只会捕获哪些位于目标SQLwhere条件的绑定变量的具体输入值,而对于哪些使用
了绑定变量insert语句,不管该insert语句是否以硬解析的方式执行,Oracle始终不会捕获其
values子句中对应绑定变量的具体输入值
实验过程
1.查询"绑定变量分级"实验中,insert语句的传入值
由于子游标已经被ageoutsharedpool,所以这里使用dba_hist_sqlstat
dbs_hist_sqlbind
dba_hist_sqlstat
dbs_hist_sqlbind
从上述查询结果可以看出,Oracle并不会捕获insert语句中values的具体传入值
2.更改原SQL语句
原语句:insertintotvalues(:n,:v)
新语句:insertintotselect*fromtwheren=:nandv=:v;
selectsnap_id,dbms_sqltune.extract_bind(bind_data,1).value_stringbind1,
dbms_sqltune.extract_bind(bind_data,2).value_stringbind2
fromdba_hist_sqlstat
wheresql_id='21mycdpm39kzv'
orderbysnap_id;
selectsnap_id,name,position,value_string,last_captured,was_captured
fromdba_hist_sqlbind
wheresql_id='21mycdpm39kzv'
orderbysnap_id;
of 8
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜