异常处理之no_data_found
异常代码:ora-01403
select * into 语句的where条件,未在数据表中找到数据
例:
DECLARE
v_data NUMBER;
begin
-- 在pur_headers_all 表数据中查询数据
-- pur_header_id 为 0 的数据是不存在的
SELECT COUNT(1) INTO v_data FROM pur_headers_all pha WHERE pha.pur_header_id = 0;
exception
--当上述插入语句的数据源未查询到数据时,触发异常NO_DATA_FOUND
WHEN NO_DATA_FOUND THEN
v_data := 0;
dbms_output.put_line(v_data);
END;
自定义异常处理
DECLARE
v_data NUMBER;
exception_a EXCEPTION; -- 定义异常代码
BEGIN
v_data := 0;
IF v_data = 0 THEN
-- 判断抛出异常逻辑
RAISE exception_a;
END IF;
EXCEPTION
--当上述判断逻辑符合时,抛出自定义异常:exception_a
WHEN exception_a THEN
dbms_output.put_line('自定义异常输出');
END;
其它异常
too_mang_rows :select into 时获取数据多行
dup_val_on_index:索引重复
zero_divide:除数为零
等等
异常 others
系统异常皆可用others来捕获(但难以确定是何异常)
即当报错其它异常却未定义特定捕获时,others可将其捕获
DECLARE
v_data NUMBER;
exception_a EXCEPTION; -- 定义异常代码
BEGIN
v_data := 0;
-- 在pur_headers_all 表数据中查询数据
-- pur_header_id 为 0 的数据是不存在的
SELECT COUNT(1) INTO v_data FROM pur_headers_all pha WHERE pha.pur_header_id = 0;
IF v_data = 0 THEN
-- 判断抛出异常逻辑
RAISE exception_a;
END IF;
EXCEPTION
--当上述插入语句的数据源未查询到数据时,触发异常NO_DATA_FOUND
WHEN NO_DATA_FOUND THEN
v_data := 1;
dbms_output.put_line(v_data);
WHEN exception_a THEN
dbms_output.put_line('自定义异常输出');
WHEN OTHERS THEN
v_data := 2;
dbms_output.put_line(v_data);
END;