重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 967|回复: 0
打印 上一主题 下一主题

[Oracle] 如何查找特定 sql 的绑定变量?

[复制链接]
跳转到指定楼层
楼主
发表于 2023-4-27 11:53:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如您所知,绑定变量的使用对于 Oracle 性能非常重要。如果应用程序或用户不使用绑定变量,那么 Oracle 开始为不同的值创建相同 sql 的执行计划。这意味着我们的数据库将具有较高的硬解析值,并且使用我们的系统资源将会增加。这些主题是性能的另一个主题。
让我们回到我们的问题?我们如何找到特定 sql 的绑定值
假设我们的数据库上正在运行一个 sql,我们想要调整该 sql。但是当我们检查它时,我们只会在我们的 sql 查询中看到 tablename.columnname=:1 ,tablename.columnname=:2 等。我们需要这些字段值才能运行或解决该 sql 的性能瓶颈。
这是可以找到相关绑定变量的相同有用的 sql:
SELECT NAME,SQL_ID,POSITION,DATATYPE_STRING,VALUE_STRING
FROM v$sql_bind_capture WHERE sql_id='&sqlid' order by Position;

或者
SELECT
sql_id,
t.sql_text sql_text,
b.name bind_name,
b.value_string bind_value
FROM
v$sql t
JOIN
v$sql_bind_capture b using (sql_id)
WHERE
b.value_string is not null
AND
sql_id='&sqlid'
;
或者
SELECT 'var b'||SUBSTR(B.NAME,2,3)||' '||B.DATATYPE_STRING||';'||CHR(10)|| ”||'exec :b'||SUBSTR(B.NAME,2,3)||' := '||””||B.VALUE_STRING||”' ;'||CHR(10)||' '
FROM V$SQL_BIND_CAPTURE B,V$SQLAREA A WHERE B.SQL_ID = A.SQL_ID AND B.SQL_ID = '&sqlid';


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-5-20 23:19 , Processed in 0.077741 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表