首先 IF SQL % NOTFOUND THEN 这个判断是没用的;
因为如果上面的查询没有查到结果, 就直接抛出异常了; (因为有INTO v_dept_name)所以异常会跳出正常流程,直接到exception 段, 对应的exception类是no_data_found, 不是no_row_found , 所以异常一直抛到最外层, 由oracle报错
因为如果上面的查询没有查到结果, 就直接抛出异常了; (因为有INTO v_dept_name)所以异常会跳出正常流程,直接到exception 段, 对应的exception类是no_data_found, 不是no_row_found , 所以异常一直抛到最外层, 由oracle报错
应该把
IF SQL % NOTFOUND THEN --无法抛出异常,此处有问题,书上这样都可以抛出的
RAISE_APPLICATION_ERROR(-20999,'INVALID DEPARTMENT');这段放到exception中, 如:
exception
when no_data_found then
RAISE_APPLICATION_ERROR(-20999,'INVALID DEPARTMENT');