我正在写我的pl sql包。我有一个像
FUNCTION my_func(argument IN NUMBER)
RETURN NUMBER
BEGIN
return some_package.somefunction(argument);
END;
我想处理异常,如果
这些例外是什么?它们是预定义的还是应该定义它们来处理?我不知道他们是在名单这里预定义的。
我该如何处理每个异常?
为了回答您的一般问题,大多数Oracle错误没有与之关联的预定义命名异常,只有您发现的几十个异常。
但是,您可以创建自己的命名异常并按如下方式关联它们:
declare
table_or_view_does_not_exist exception;
pragma exception_init (table_or_view_does_not_exist, -942);
l_table_name varchar2(30) := 'XXX';
l_count integer;
begin
execute immediate 'select count(*) from ' || l_table_name into l_count;
exception
when table_or_view_does_not_exist then
raise_application_error (-20001, 'No such table exists');
end;
/
declare
*
ERROR at line 1:
ORA-20001: No such table exists
ORA-06512: at line 10
如何实际处理异常取决于您。
您可以在包规范中声明此类异常,然后在其他代码中使用它们:
when my_package.my_exception then...
或者,您可以在“其他人”中捕获它们,然后使用sqlcode
它们来识别它们:
declare
l_table_name varchar2(30) := 'XXX';
l_count integer;
begin
execute immediate 'select count(*) from ' || l_table_name into l_count;
exception
when others then
case sqlcode
when -942 then
raise_application_error (-20001, 'No such table exists');
else
raise;
end case;
end;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句