前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PLSQL-异常处理

PLSQL-异常处理

作者头像
字母哥博客
发布2020-09-23 11:15:20
2950
发布2020-09-23 11:15:20
举报

异常处理

加入异常处理的语句块结构

代码语言:javascript
复制
declare
    --声明变量
begin
   --程序体
exception
   --异常处理
end;

常见的异常

代码语言:javascript
复制
declare
  vSal emp.sal%type;
begin
  select sal into vSal from emp;
exception
    when too_many_rows then
      dbms_output.put_line('单一变量不能存放多条数据');
    when others then
      dbms_output.put_line('发生了异常');
end;
代码语言:javascript
复制
declare
  vSal emp.sal%type;
begin
  select sal into vSal from emp where empno = 1;
exception
    when no_data_found then
        dbms_output.put_line('查询结果没有数据');
    when others then
        dbms_output.put_line('Error');
end;

自定义异常

代码语言:javascript
复制
declare
     ex_custom_invaild_age exception; --自定义的异常
     age int;
begi
     age := &请输入年龄;
     if (age < 0) then
        raise ex_custom_invaild_age; --引发自定义异常
     else
        dbms_output.put_line('年龄是:' || age);
     end if;
exception
      when ex_custom_invaild_age then
        dbms_output.put_line('非法的年龄');
end;

引发应用程序异常

  • raise_application_error(异常编号,说明);
代码语言:javascript
复制
declare
       age int;
begin
     age := &请输入年龄;
     if (age < 0) then
        raise_application_error(-20500, '年龄只能是正整数');
     else
        dbms_output.put_line('年龄是:' || age);
     end if;
end;

非预定义异常

代码语言:javascript
复制
declare
     ex_custom_error exception;  --自定义异常
     pragma exception_init(ex_custom_error, -1); --把一个编号和一个自定义异常关联,
     --相当于把-1编号的异常命名为ex_custom_error,这样就可以捕获这种异常
begin
     insert into dept values(10, 'aaa', 'bbb');
exception
       when ex_custom_error then
        dbms_output.put_line('部门编号已经存在');

end;

异常日志处理

代码语言:javascript
复制
create table errorLog (

       id number primary key,

       errCode number,

       errMsg varchar2(1024),

       errDate date

);

--创建序列,从1开始,每次加1

create sequence seq_errorLog_id start with 1 increment by 1;


declare
       vDeptno dept.deptno%type := 10;
       vErrCode number;
       vErrMsg varchar2(1024);
begin
  delete from dept where deptno = vDeptno;
  commit;
exception
    when others then
      rollback;
      vErrCode := SQLCODE;  --SQL异常编号
      vErrMsg := SQLERRM;   --SQL异常信息
      --SQLCODE和SQLERRM为异常处理自带变量
      insert into errorLog values(seq_errorLog_id.nextval, vErrCode, vErrMsg, sysdate);
      commit;
end;



select * from errorLog

转载自

http://www.cnblogs.com/hoojo/archive/2011/05/03/2035350.html

喜欢 (1)or分享 (0)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-02-09),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 异常处理
    • 加入异常处理的语句块结构
      • 常见的异常
        • 自定义异常
          • 引发应用程序异常
            • 非预定义异常
              • 异常日志处理
              • 转载自
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档