如何获取Oracle中SYS_B_N变量的值?查询优化遇阻求助
获取绑定变量SYS_B_N值的方法
这些SYS_B_*是Oracle自动生成的绑定变量名,值由调用该查询的程序传入,以下是几种获取值的方式:
- 查应用代码:直接找执行这条SQL的应用程序代码(比如Java JDBC、Python cx_Oracle等),里面肯定有设置这些绑定参数的逻辑,能看到实际传入的值。
- 用Oracle数据库工具追踪:
- 会话追踪:先定位执行该SQL的会话ID和序列号,执行以下命令开启绑定变量追踪:
然后去数据库的trace目录下找生成的trace文件,里面会记录绑定变量的实际值。EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id => <会话ID>, serial_num => <序列号>, binds => TRUE); - 查询
V$SQL_BIND_CAPTURE视图:如果这条SQL已经执行过,先通过V$SQL找到它的SQL_ID:
再用SQL_ID查询绑定变量值:SELECT sql_id, sql_text FROM V$SQL WHERE sql_text LIKE '%SELECT NVL(SUM("A1"."SALDO_EQUIVAL_OUT"),:"SYS_B_0")%';SELECT name, value_string, datatype_string FROM V$SQL_BIND_CAPTURE WHERE sql_id = '<刚才查到的SQL_ID>';
- 会话追踪:先定位执行该SQL的会话ID和序列号,执行以下命令开启绑定变量追踪:
- 问相关人员:直接找负责该应用的开发,或者有权限的资深DBA,他们大概率清楚这条SQL的调用场景和参数值。
原查询语句:
SELECT NVL(SUM("A1"."SALDO_EQUIVAL_OUT"),:"SYS_B_0") FROM "ACCOUNTS" "A1" WHERE SUBSTR("A1"."CODE",:"SYS_B_1",:"SYS_B_2") LIKE :"SYS_B_3" AND SUBSTR("A1"."CODE",:"SYS_B_4",:"SYS_B_5")<>:":SYS_B_6" AND SUBSTR("A1"."CODE",:"SYS_B_7",:"SYS_B_8")=:"SYS_B_9"
内容的提问来源于stack exchange,提问作者Miralisher Mirxomidov
相关产品推荐
相关产品推荐

