Plsql存储过程执行-如何监控



如何在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监视器,但没有帮助

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

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、日志表等)。错误堆栈是最重要的,因为它会告诉您抛出异常的确切行号。通常,如果一个异常被抛出到客户端,客户端会给你整个错误堆栈,你就有了你需要的东西。如果没有,您可以自己获取。

的例子:

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语句,并查找可能不存在的任何集合/数组下标。

最新更新