Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PL/SQL-基于Oracle的函数,用于在运行时获取所有变量的内容_Oracle_Function_Plsql_Oracle11g_Exception Handling - Fatal编程技术网

PL/SQL-基于Oracle的函数,用于在运行时获取所有变量的内容

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

我想改进我们的异常处理。在出现异常的情况下,最好有更多的错误消息、错误回溯或错误调用堆栈

我们使用动态SQL,对我来说,如果我能够记录所有输入和输出变量,以及代码每个异常中动态SQL语句的内容,那将是一种改进

当然,我可以单独处理每个变量,并使用数据内容记录它们,如本例所示:

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没有这种自省。