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 在循环中处理用户定义的异常的主要内容,如果未能解决你的问题,请参考以下文章