Oracle异常

只会处理抛出上面的异常
      /*
    create type emp_type as object
      (name varchar2(10), sal number(6,3));
    */
    declare 
        v_emp emp_type;

begin
     --   v_emp :=emp_type('',0);

  v_emp.name :='dfd';
  
 exception 
   when access_into_null then
     dbms_output.put_line('请先初始化empty对象'); 

   dbms_output.put_line('dfdg');
end;

异常捕获

declare
v_sal emp.sal%type;
begin

select sal into v_sal from emp;

exception
when no_data_found then
dbms_output.put_line('未找到');
when too_many_rows then
dbms_output.put_line('太多找到');
end;

declare
v_sal emp.sal%type;
e_no_emp exception; -- 定义异常
begin
update emp set deptno = 10 where empno = 3;
if SQL%notfound then --当更新数据不存在的时候触发异常
raise e_no_emp; --异常触发
end if;
exception
when no_data_found then
dbms_output.put_line('未找到修改员工');
when too_many_rows then
dbms_output.put_line(sqlcode||'行数太多'||sqlerrm);
when e_no_emp then
-- -20000~ -20999
raise_application_error(-20034,'未找到修改的员工');

end;

PL/SQL 程序运行期间经常会发生各种异常,一旦发生异常,如果不进行处理程序就会被终止,Oracle系统将异常分为预定义异常和自定义异常
exception
when exception then

如果异常不匹配,将执行other块中的代码

预定义异常

timeout_on_resource : 等待资源发生超时
invalid_cursor : 使用无效游标
no_logged_on :未连接Oracle
login——denied :无效的用户名或密码
no_data_found L没有找到数据

自定义异常

exception_name exception : 声明异常对象
raise exceptio_name 触发异常

异常函数

sqlcode() 返回Oracle错误编号
sqlerrm(): 返回对应的错误信息
raise_application_error (error_code,[{true| false}])
error_code : 定义错误编号-20000~ -20999
message : 提示的错误信息,长度不超过2048个字节

你可能感兴趣的:(Oracle异常)