18. 异常的基本程序: 通过 select ... into ... 查询某人的工资, 若没有查询到, 则输出 "未找到数据"
declare --定义一个变量 v_sal employees.salary%type; begin --使用 select ... into ... 为 v_sal 赋值 select salary into v_sal from employees where employee_id = 1000; dbms_output.put_line('salary: ' || v_sal); exception when No_data_found then dbms_output.put_line('未找到数据'); end;
或
declare --定义一个变量 v_sal employees.salary%type; begin --使用 select ... into ... 为 v_sal 赋值 select salary into v_sal from employees; dbms_output.put_line('salary: ' || v_sal); exception when No_data_found then dbms_output.put_line('未找到数据!'); when Too_many_rows then dbms_output.put_line('数据过多!'); end;
19. 更新指定员工工资,如工资小于300,则加100;对 NO_DATA_FOUND 异常, TOO_MANY_ROWS 进行处理.
20. 处理非预定义的异常处理: "违反完整约束条件"
declare --1. 定义异常 temp_exception exception; --2. 将其定义好的异常情况,与标准的ORACLE错误联系起来,使用EXCEPTION_INIT语句 PRAGMA EXCEPTION_INIT(temp_exception, -2292); begin delete from employees where employee_id = 100; exception --3. 处理异常 when temp_exception then dbms_output.put_line('违反完整性约束!'); end;
21. 自定义异常: 更新指定员工工资,增加100;若该员工不存在则抛出用户自定义异常: no_result
declare --自定义异常 no_result exception; begin update employees set salary = salary + 100 where employee_id = 1001; --使用隐式游标, 抛出自定义异常 if sql%notfound then raise no_result; end if; exception --处理程序抛出的异常 when no_result then dbms_output.put_line('更新失败'); end;