我想改进我们的异常处理。如果出现异常,最好还有错误消息,错误回溯或错误调用堆栈。
我们使用动态SQL,对我来说,如果我可以记录所有输入和输出变量,以及代码的每个例外中动态SQLStatement的内容,那将是一种改进。
当然,我可以单独处理每个变量并使用数据内容记录它们,如下例所示:
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嵌入的函数或过程,我可以调用它,并返回代码中使用的所有变量及其名称和内容,这将是很好的。我想在每个更严格的例外情况中调用此函数。
你知道这样的Oracle功能吗?
非常感谢。
答案 0 :(得分:0)
诸如PL / SQL Developer之类的IDE具有内置的调试功能(这就是“以调试模式运行PL / SQL单元” 的意思)。这是一个基于Oracle内置软件包DBMS_DEBUG构建的框架。这实际上是一个工具箱,而不是一个工作工具。要牢记的最重要的一点是,调试器在单独的会话中运行,该会话对正在运行的代码进行探测。这意味着它不适合您的目的。
记录一长串变量和参数是一个令人讨厌的事情,并且要对其进行严格维护。但是a,没有更好的选择了。