隐式游标要捕获 NO_DATA_FOUND、TOO_MANY_ROWS 两类异常
×:BEGIN
SELECT ename INTO vs_ename from emp WHERE empno=1234;
……
END;
○:EGIN
SELECT ename INTO vs_ename from emp WHERE empno=1234;
EXCEPTION
WHEN no_data_found THEN
异常处理的处理顺序是先特殊再通用,在程序的最外层才捕获
通用异常(others)
不要在内部块中捕获 others 异常,不要简单的掩盖数据的错误,处理的原则是先特殊,再
通用,others放最外层。
×:BEGIN
SELECT ename INTO vs_ename from emp WHERE empno=1234;
EXCEPTION
WHEN others THEN
oi_flag := -1;
os_msg := ‘查询出现未知异常’;
return;
END;
○:BEGIN
--此处处理特殊的异常,包括自定义异常
BEGIN
SELECT ename INTO vs_ename from emp WHERE empno=1234;
EXCEPTION
WHEN no_data_found THEN
oi_flag := -1;
os_msg := ‘XXX记录已不存在’;
return;
WHEN too_many_rows THEN
oi_flag := -1;
os_msg := ‘XXX员工数量异常,超过一条’;
return;
END;
--在最外层处理通用异常
EXCEPTION