在PL / SQL中捕获ORA异常

时间:2015-12-03 23:00:48

标签: oracle

我编写了一个包,用于在国家/地区表中添加记录,如果我尝试在我的国家/地区表中添加“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

1 个答案:

答案 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