oracle出现异常如何继续执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle出现异常如何继续执行相关的知识,希望对你有一定的参考价值。

create or replace procedure demo as

myex exception;

begin

begin

begin
for i in 1 .. 10 loop

if i = 5 then
raise myex;
end if;

dbms_output.put_line(i);

end loop;

exception
when others then
dbms_output.put_line('111er');

end;

end;
end demo;

参考技术A 你的意思是, 要当发生异常 dbms_output.put_line('111er'); 以后, 循环继续执行?

create or replace procedure demo as
myex exception;
begin
begin
for i in 1 .. 10 loop

BEGIN
if i = 5 then
raise myex;
end if;
dbms_output.put_line(i);

exception
when others then
dbms_output.put_line('111er');
END;

end loop;

end;
end demo;

抛出异常后如何继续执行java程序?

【中文标题】抛出异常后如何继续执行java程序?【英文标题】:How to continue executing a java program after an Exception is thrown? 【发布时间】:2012-03-08 22:20:05 【问题描述】:

我的示例代码如下:

public class ExceptionsDemo 

    public static void main(String[] args) 
        try 
            int arr[]=1,2,3,4,5,6,7,8,9,10;
            for(int i=arr.length;i<10;i++)
                if(i%2==0)
                    System.out.println("i =" + i);
                    throw new Exception();
                            
            
         catch (Exception e) 
            System.err.println("An exception was thrown");
                    
    

我的要求是,在捕获到异常后,我想处理数组的剩余元素。我该怎么做?

【问题讨论】:

为什么一开始就抛出异常? 那么首先,如果您不想对异常做任何事情,为什么要抛出异常? 将 try/catch 重新定位到循环内部。那么当异常发生时,由于你还在循环中,所以继续正常执行。 如果你想继续,为什么要抛出这样的异常? for(int i=arr.length;i&lt;10;i++) 你也进入这个循环吗?我想你的意思是for(int i=0; i&lt;arr.length;++i) 【参考方案1】:

在 for 循环中移动 try catch 块,然后它应该可以工作

【讨论】:

【参考方案2】:

您需要稍微重新构造它,以便 try/catch 位于 for 循环内,而不是封闭它,例如

for (...) 
  try 
    // stuff that might throw
  
  catch (...) 
    // handle exception
  

顺便说一句,你应该避免使用异常来进行流控制——异常应该用于异常的事情。

【讨论】:

【参考方案3】:

您不能这样做,因为您的数组是在 try 子句中定义的。如果您希望能够访问它,请将其移出那里。另外,也许您应该以某种方式将我导致的异常存储在异常中,以便您可以继续。

【讨论】:

【参考方案4】:

只要不抛出异常,那么:

int arr[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;
for (int i = 0; i < arr.length; i++) 
    if (i % 2 == 0) 
        System.out.println("i = " + i);
      
    

或者抛出它,然后在循环内部而不是外部捕获它(但我看不出在这个简单的例子中抛出异常的意义):

int arr[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;
for (int i = 0; i < arr.length; i++) 
    try 
        if (i % 2 == 0) 
            System.out.println("i = " + i);
            throw new Exception();
        
    
    catch (Exception e) 
        System.err.println("An exception was thrown");
    

旁注:看看代码在正确缩进时如何更容易阅读,并且在运算符周围包含空格。

【讨论】:

【参考方案5】:

您的代码应如下所示:

public class ExceptionsDemo 

    public static void main(String[] args) 
        for (int i=args.length;i<10;i++)
            try 
                if(i%2==0)
                    System.out.println("i =" + i);
                    throw new Exception();  // stuff that might throw
                
             catch (Exception e) 
                System.err.println("An exception was thrown");
            
        
    

【讨论】:

以上是关于oracle出现异常如何继续执行的主要内容,如果未能解决你的问题,请参考以下文章

java怎么处理异常让程序继续执行

在 Oracle 动态 SQL 之后如何继续

python 如何跳过异常继续执行

忽略oracle触发器中的异常

转 C#WinForm程序异常退出的捕获继续执行与自动重启

抛出异常后如何继续执行java程序?