我编写了一个包,用于在国家/地区表中添加记录,如果我尝试在我的国家/地区表中添加“region_id”并且该值没有,则使用region_id.So指向“regions”表。存在于我的Regions表中,我应该抛出异常并捕获。 我的包裹代码是:
CREATE PACKAGE BODY cus7 AS
v_error_code NUMBER;
region_exists pls_integer;
procedure addi6 (c_cntry_id in out countries.country_id%type,
c_cntr_name in countries.country_name%type,
c_rgn_id in countries.region_id%type)
is
begin
begin
select 1 into region_exists
from regions r
where r.region_id = c_rgn_id;
exception
when no_data_found then
region_exists := 0;
DBMS_OUTPUT.PUT_LINE('Region not present');
end;
if region_exists = 1 then
insert into countries(country_id, country_name,region_id)
values (c_cntry_id, c_cntr_name, c_rgn_id);
DBMS_OUTPUT.PUT_LINE('Inserted');
END IF;
EXCEPTION
WHEN dup_val_on_index
THEN
c_cntry_id := null;
DBMS_OUTPUT.PUT_LINE('Already present');
end addi6;
END cus7;
/
现在,在我的程序中,一切都运行正常,除非我做这样的添加:
DECLARE
outputValue CHAR(2) := 'KO';
begin
cus7.addi6(outputValue,'KOREA',5);
end;
/
除了收到我自己的“找不到地区”的消息外,我还得到了ORA-01403 - 没有找到数据。
我的问题是,是否有办法捕获此ORA异常或避免显示?
提前Tx
答案 0 :(得分:0)
是的,您所要做的就是将WHEN OTHERS
添加到您的例外块中,以便捕获所有其他可能的ORA
例外。
EXCEPTION
WHEN dup_val_on_index
THEN
c_cntry_id := null;
DBMS_OUTPUT.PUT_LINE('Already present')
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE('Another Error');
-- other logic here
这是关于PL / SQL中错误处理的extensive documentation。