Oracle—在发生异常时以字符串形式获取SQL

Oracle—在发生异常时以字符串形式获取SQL,sql,oracle,exception,Sql,Oracle,Exception,当查询无法执行且返回游标处于失败状态时,我尝试从数据库调用返回SQL查询。此查询字符串将用于日志记录目的 一种方法是将包含SQL查询的变量作为字符串保存,然后使用异常处理程序将每个查询包装在PL/SQL块中,如果出现异常,则将具有故障状态的查询字符串返回给UI组件 有更好的方法吗?Oracle异常对象或任何其他包是否支持此功能 这个问题似乎是线程的重复: 但是,我没有在该线程中找到问题的解决方案,我想知道Oracle是否支持提供导致异常发生的查询字符串的任何新包。当您从外部语言Java C调用数

当查询无法执行且返回游标处于失败状态时,我尝试从数据库调用返回SQL查询。此查询字符串将用于日志记录目的

一种方法是将包含SQL查询的变量作为字符串保存,然后使用异常处理程序将每个查询包装在PL/SQL块中,如果出现异常,则将具有故障状态的查询字符串返回给UI组件

有更好的方法吗?Oracle异常对象或任何其他包是否支持此功能

这个问题似乎是线程的重复:


但是,我没有在该线程中找到问题的解决方案,我想知道Oracle是否支持提供导致异常发生的查询字符串的任何新包。

当您从外部语言Java C调用数据库时,您可能可以这样做,通过实现自己的JDBC或任何驱动程序

您可以通过将真实世界委托给一个普通的驱动程序来实现这一点,但每当向数据库发送语句时,您都会记住该语句,如果导致异常,则会创建一个新的异常,该异常还包括sql语句和可能的绑定变量


请注意,这只会给出您的声明。如果执行存储过程或触发触发器,而触发器又失败了,则只能得到原始语句,而不是实际失败的语句。

可能会有所帮助。虽然如果您调用的是运行SQL的过程,它可能会记录该过程调用,而不是真正导致失败的SQL。您希望在PL/SQL块或外部块之外执行此操作,对吗?i、 e.如果您从duala运行select*;在SQL*中,它将被记录在某个地方?@jonearles,我会通读它,并让你知道它是否有效,谢谢@本,我不明白你的想法,你能详细解释一下吗?@Shankar,这不是一个想法,这是一个问题!是否希望运行每个SQL查询(无论从何处开始),并在失败时将其记录下来?您从何处调用存储过程/查询?当您在对答案的注释中自相矛盾时,它是从何处调用的?是的,我正在尝试调用存储过程。因此,我不知道如何获取失败的查询