1

谁能告诉如何在不关闭提示的情况下退出 pl/sql 中的无限循环?我在不知不觉中错过了退出,所以程序进入了无限循环,最后我关闭了提示并丢失了程序。

4

2 回答 2

4

如果您的意思是您已经处于这种情况并且您正在运行一个正在消耗资源的循环语句,并且您不再可以从客户端访问会话;您需要从有权执行此操作的帐户中终止会话:

ALTER SYSTEM KILL SESSION 'sid,serial#';

或者你可以从 SQL Developer 中杀死它

您可以在文档中找到有关识别会话的信息,或在此处查看摘要。

与往常一样,请确保您正在杀死正确的东西,以避免意外损坏其他东西。


在关闭“提示”之前,您可能已经习惯于control-c中断语句并重新获得控制权。

于 2013-06-09T15:15:56.493 回答
1

一旦进入循环,唯一的出路就是终止客户端程序(数据库最终会注意到会话是孤立的并终止它)或要求DBA 为您终止会话。无论哪种方式,您都会丢失程序。

彻底摆脱无限循环的唯一方法是一开始就不要编写无限循环。

怎么做?好吧,首先,我们可以在运行之前检查我们的代码。我们可以通过使用支持代码片段的体面的编辑器来加强这种技术。这至少为各种形式的 LOOP 提供了模板的可能性,其中包括 EXIT 条件的子句。片段作为一种防错技术非常棒。

其次,我们可以使用受控数据运行单元测试。这不会阻止我们编写一个无限循环,但它会让我们在将代码投入生产之前捕获一个。

第三,使用监控。我们可以使用 DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS() 来检测我们的 PL/SQL。这提供了一个窗口,可以让我们查看调用循环的频率。 了解更多

于 2013-06-09T13:20:12.880 回答