PL/SQL-基于Oracle的函数,用于在运行时获取所有变量的内容
我想改进我们的异常处理。在出现异常的情况下,最好有更多的错误消息、错误回溯或错误调用堆栈 我们使用动态SQL,对我来说,如果我能够记录所有输入和输出变量,以及代码每个异常中动态SQL语句的内容,那将是一种改进 当然,我可以单独处理每个变量,并使用数据内容记录它们,如本例所示:PL/SQL-基于Oracle的函数,用于在运行时获取所有变量的内容,oracle,function,plsql,oracle11g,exception-handling,Oracle,Function,Plsql,Oracle11g,Exception Handling,我想改进我们的异常处理。在出现异常的情况下,最好有更多的错误消息、错误回溯或错误调用堆栈 我们使用动态SQL,对我来说,如果我能够记录所有输入和输出变量,以及代码每个异常中动态SQL语句的内容,那将是一种改进 当然,我可以单独处理每个变量,并使用数据内容记录它们,如本例所示: exception when others then cg$errors.log_new (null,null,'Test-Unit',null,'SQLCODE: ' || SQLCODE || c
exception
when others then
cg$errors.log_new (null,null,'Test-Unit',null,'SQLCODE: ' || SQLCODE || chr(10)
|| ' --- SQLERRM: ' || sqlerrm || chr(10)
|| ' --- Stacktrace: ' || dbms_utility.format_error_backtrace || chr(10)
|| ' --- Parameter:'|| chr(10)
|| 'vWorkstation in Varchar2: ' || vWorkstation || chr(10)
|| 'vUser in Varchar2: ' || vUser || chr(10)
|| 'vtest clob : ' || vtest|| chr(10)
|| 'vtest1 clob : ' || vtest1|| chr(10)
|| 'vtest1m clob : ' || vtest1m|| chr(10)
|| 'temp_table clob : ' || temp_table|| chr(10));
raise;
但这是高维护,因为我需要在每个异常中显式地处理不同的变量(vWorkstation
,vUser
等等)
当我在调试模式下运行PL/SQL单元时,我可以在调试代码的每个步骤中看到所有变量(vWorkstation、vUser等)的列表。所以我认为,当SQL开发人员在调试期间向我显示这些数据时,一定有一种方法可以在运行时获取变量列表
所以我想如果Oracle嵌入了一个函数或过程,我可以调用它并返回代码中使用的所有变量及其名称和内容,那就太好了。我想在我的每个更难的异常中调用这个函数
你知道这样的甲骨文功能吗
非常感谢。诸如PL/SQL Developer之类的IDE具有内置调试功能(这就是我认为您所说的“在调试模式下运行PL/SQL单元”)。这是一个基于Oracle内置包构建的框架。这在很大程度上是一个工具箱,而不是一个工作工具。需要记住的最重要的一点是,调试器在一个单独的会话中运行,该会话探测正在运行的代码。这意味着它不适合你的目的
记录变量和参数的长列表有点恶心,维护它们是一个纪律问题。但是,唉,没有更好的选择了 PL/sqldeveloper之类的ide具有内置的调试功能(这就是我认为您所说的“在调试模式下运行PL/SQL单元”)。这是一个基于Oracle内置包构建的框架。这在很大程度上是一个工具箱,而不是一个工作工具。需要记住的最重要的一点是,调试器在一个单独的会话中运行,该会话探测正在运行的代码。这意味着它不适合你的目的
记录变量和参数的长列表有点恶心,维护它们是一个纪律问题。但是,唉,没有更好的选择了 最好使用代码用来转储所需变量的方式,而不是使用所有变量。我想我必须分享我的观点,除非你有一个特定的目的,在那一刻记录/转储所有he变量。感谢您的日志记录过程本身可以找出调用和错误堆栈的详细信息。我不想麻烦使用
sqlcode
,因为它已经是错误堆栈的一部分了。至于作用域中的完整变量列表,PL/SQL没有这种内省,最好使用代码用来转储所需变量的方式,而不是使用所有变量。我想我必须分享我的观点,除非你有一个特定的目的,在那一刻记录/转储所有he变量。感谢您的日志记录过程本身可以找出调用和错误堆栈的详细信息。我不想麻烦使用sqlcode
,因为它已经是错误堆栈的一部分了。至于作用域中的完整变量列表,PL/SQL没有这种自省。