oracle Plsql存储过程执行-如何监视

frebpwbc  于 2023-04-11  发布在  Oracle
关注(0)|答案(1)|浏览(279)

如何在toad中监视存储过程的执行?我尝试监视的内容摘要:

Procedure ArchiveData ( Param 1, Param 2, Param 3, Param 4)(

    Variable 1 := Some calc using above params;
    Variable 2 := Some calc using above params;

Call_to_another_procedure2(Param3, Param 4,variable 1);

Call_to_another_procedure3(Param3, Param 4,variable 1);

End;

是否有办法查看所有使用参数值执行的语句,包括调用过程/函数中的语句?
我用的是Toad 14.1
谢谢你的帮助!
尝试使用会话浏览器和sql监视器,但没有帮助

s2j5cfk0

s2j5cfk01#

调试PL/SQL的典型方法是通过dbms_output.put_line发出消息,这在大多数数据库客户端软件产品中都可以看到。虽然有时你必须在设置/选项中启用它,它可能会出现在一个单独的选项卡或屏幕中,而不是你的结果通常做.在内部,这些产品只是在一个循环中调用dbms_output.get_line,并显示输出给你,直到没有任何更多的缓冲区.您可以通过调用put_line在PL/SQL中加载缓冲区。

DECLARE
  var1 ...
  var2 ...
BEGIN
  dbms_output.put_line('var1 = '||var1||', var2 = '||var2);
  procedurecall(var1,var2);
  dbms_output.put_line('Got here 2');
  --etc...
END;

第二件事,实际上更重要,是良好的异常处理。您应该处理靠近潜在错误点的异常,并始终确保您要么重新引发客户端,要么报告这些错误(dbms_output,logging table,etc..),并带有完整的错误堆栈和调用堆栈。错误堆栈是最重要的,因为它会告诉你抛出异常的确切行号。通常如果一个异常被抛出到客户端,客户端会给予你整个错误堆栈,你就有了你需要的东西。如果没有,你可以自己获取。
示例:

BEGIN
  -- do something that can fail
EXCEPTION
  WHEN OTHERS THEN
    dbms_output.put_line(dbms_utility.format_error_backtrace||CHR(10)||
                         dbms_utility.format_error_stack||CHR(10)||
                         dbms_utility.format_call_stack);
    RAISE;
END;

当然,你也可以用其他方式来使用异常处理,比如不向客户端重新引发异常,而是向前移动,或者返回一个状态码而不是异常,等等。但是这应该会给予你一个想法。目标是总是知道什么地方失败了,在什么行号,在PL/SQL程序中的什么地方,以及哪个异常处理程序堆栈将它重新引发回客户端,等等。所有有用的信息。
至于01403错误,请查找可能找不到任何行的SELECT INTO语句,并查找可能不存在的任何集合/数组下标。

相关问题