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

标题: 如何查找特定 sql 的绑定变量? [打印本页]

作者: jiawang    时间: 2023-4-27 11:53
标题: 如何查找特定 sql 的绑定变量?
如您所知,绑定变量的使用对于 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';







欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2