oracle 在循环中处理用户定义的异常

Posted

技术标签:

【中文标题】oracle 在循环中处理用户定义的异常【英文标题】:oracle handle user defined exception in a loop 【发布时间】:2020-04-28 15:56:58 【问题描述】:

我有一个包含所有者(模式)和 table_names 的查找表。所以我想遍历这个查找表,将数据从这个 owner.table 插入到一个新表中。但我想在循环中处理异常,以防所有者/表不存在。

但我在编译以下代码时收到此错误消息。 错误(49,21):PLS-00103:在预期以下情况之一时遇到符号“EXCEPTION”:(begin case declare end exit for goto if loop mod null pragma raise return select update while with

declare
table_does_not_exist exception;  
PRAGMA EXCEPTION_INIT(table_does_not_exist, -942);

cursor lookup_table is
select owner,table_name
from lookup;

begin
for rec in lookup_table loop
  execute immediate 'insert into new_table select * from '||rec.owner||'.'||rec.table_name;

  exception
  when table_does_not_exist then
      dbms_output.put_line('table dose not exist, continue the interation');
      continue;
end loop;

【问题讨论】:

【参考方案1】:

Oracle 的块结构允许块嵌套。因此,在您的循环中,您可以嵌套一个处理您的异常的块。

declare
table_does_not_exist exception;  
PRAGMA EXCEPTION_INIT(table_does_not_exist, -942);

cursor lookup_table is
select owner,table_name
from lookup;

begin
for rec in lookup_table loop 
    begin 
       execute immediate 'insert into new_table select * from '||rec.owner||'.'||rec.table_name;

    exception
        when table_does_not_exist then
          dbms_output.put_line('table dose not exist, continue the interation');
    end ; 
end loop;  
end ;

【讨论】:

以上是关于oracle 在循环中处理用户定义的异常的主要内容,如果未能解决你的问题,请参考以下文章

Oracle异常

oracle异常(-)

ORACLE异常处理及函数

ORA-06510: PL/SQL: 未处理的用户定义异常 [Oracle]

总结:整理 oracle异常错误处理 . (转载)

ORACLE 异常错误处理