【问题标题】:Oracle - Log the executed queryOracle - 记录执行的查询
【发布时间】:2023-03-15 12:28:01
【问题描述】:

我必须调试包含一些 SQL 查询的存储过程。其中一个包含错误。所以,我需要在其他窗口中使用参数执行这个 SQL 查询。我找到了下一个对我有帮助的查询:

select v.SQL_TEXT
from v$sql v

很遗憾,此字段受 1Kb 限制。就我而言,我有相当大的 SQL 查询,Oracle 将其截断。如何记录执行的查询?我使用 PL/SQL Developer 10 和 Oracle 9i

【问题讨论】:

  • 记录 sql 查询是什么意思? :s
  • @jWeaver,类似于将带有参数的 SQL 查询从存储过程导出到 .txt。例如,select * from employee e where e.id=vID select * from employee e where e.id=15
  • 使用绑定参数启用跟踪并在输出 *.com/questions/18928230/… 上运行 tkprof

标签: oracle plsql


【解决方案1】:

很遗憾,这个字段被限制为 1Kb

如果您需要完整的 SQL,请使用 SQL_FULLTEXT,它是一种 CLOB 数据类型,而不是 SQL_TEXT,它仅限于前 1000 个字符。

来自documentation

Column          Datatype        Description
------          --------------  ---------------------------------------

SQL_TEXT        VARCHAR2(1000)  First thousand characters of the SQL 
                                text for the current cursor

SQL_FULLTEXT    CLOB            Full text for the SQL statement exposed 
                                as a CLOB column. The full text of a SQL
                                statement can be retrieved using this 
                                column instead of joining with the 
                                V$SQL_TEXT dynamic performance view.

所以,使用:

SELECT SQL_FULLTEXT FROM v$sql;

顺便说一句,您似乎实际上是在寻找跟踪会话以获取过程和所涉及的 SQL 语句的完整详细信息。我建议使用 4 级 跟踪会话,即添加 绑定变量值

How to generate trace file – SQL Trace and TKPROF in Oracle

【讨论】:

  • 很遗憾,我没有权限让服务器查看跟踪文件。所以,我只能使用一种方法,即 v$sql 表,我认为这很容易。我明天要试试你的解决方案。如果它有效,我会检查你的答案。还是谢谢!
  • 在我使用的 Oracle 9i 中,没有 SQL_FULLTEXT 字段。我需要另辟蹊径!
  • 你试过v$sql_text吗?
  • 您的意思是v$sqltext?是的,有 SQL_TEXT 字段限制为 64 个字节。我开始讨厌 Oracle 9i
  • 抱歉,我没有要检查的 9i 实例。顺便说一句,Oracle 9i 已被取消支持。
最近更新 更多