如何获取最后执行的SQL语句并在oracle中绑定变量值

var*_*run 12 oracle

我编写了以下查询以获取oracle数据库中针对特定会话的最后执行的SQL语句.SQL文本不包含绑定变量的实际值.如何获取绑定变量值以及SQL文本.

SELECT * FROM v$SQLTEXT_WITH_NEWLINES WHERE address = 
  (SELECT prev_sql_addr FROM v$session WHERE audsid = userenv('SESSIONID'))
ORDER BY piece;
Run Code Online (Sandbox Code Playgroud)

Kir*_*ran 27

要获取绑定变量,您必须使用下面的代码,您不需要使用跟踪.

SELECT * FROM v$sql_bind_capture WHERE sql_id='';
Run Code Online (Sandbox Code Playgroud)

要么

SELECT NAME,POSITION,DATATYPE_STRING,VALUE_STRING 
FROM v$sql_bind_capture WHERE sql_id='';
Run Code Online (Sandbox Code Playgroud)

http://shaharear.blogspot.com/2009/02/find-bind-variable-value.html


Vin*_*rat 5

我认为默认情况下不存储绑定变量值.不考虑潜在的安全问题(看到其他会话的实际工作),要存储的数据量将是巨大的.

如果要查看绑定变量的值,则应激活该会话的跟踪.您可以通过在该会话中执行以下命令来执行此操作:

alter session set events '10046 trace name context forever, level 12'; 
Run Code Online (Sandbox Code Playgroud)

有关AskTom的更多信息:10046跟踪

  • 更高版本(10g和11g)会记录用于在V $ SQL_BIND_capture中查看的绑定变量.但这只会针对SQL的解析的优化阶段,而不是每次执行. (4认同)