--异常处理

declare

  sNum number := 0;

begin

  sNum := 5 / sNum;  

  dbms_output.put_line(sNum);

exception 

  when others then

    dbms_output.put_line('is Error!');

end;

 

--自定义异常

declare

       ex_custom_invaild_age exception; --自定义的异常myerr

       age int;

begin

     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(异常编号,说明);

declare        

       age int;

begin

     age := &请输入年龄;

     if (age < 0) then

        raise_application_error(-20500, '年龄不能为负数');

     else

        dbms_output.put_line('年龄是:' || age);

     end if;

end;

 

--非预定义异常

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;

 

--异常处理

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('Error');

end;

 

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;

 

--异常日志处理

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;

      vErrMsg := SQLERRM;

      insert into errorLog values(seq_errorLog_id.nextval, vErrCode, vErrMsg, sysdate);

      commit;

end;

 

select * from errorLog;

Oracle笔记 七、PL/SQL 异常处理的更多相关文章

  1. Oracle数据库之PL/SQL异常处理

    Oracle数据库之PL/SQL异常处理 异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的. PL/SQL程序设计过程中,即使是写得最好的程序也可能会遇到错误或未预料 ...

  2. Oracle学习笔记之五,Oracle 11g的PL/SQL入门

    1. PL/SQL概述 PL/SQL(Procedural Language/SQL)是Oracle的专用语言,是对标准SQL语言的扩展,它允许在其内部嵌套普通的SQL语句,还可以定义变量和常量,允许 ...

  3. oracle数据库之PL/SQL 块结构和组成元素

    一.PL/SQL 块 (一)PL/SQL 程序由三个块组成,即声明部分.执行部分.异常处理部分 PL/SQL 块的结构如下: 1.DECLARE /* 声明部分: 在此声明 PL/SQL 用到的变量, ...

  4. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  5. PL/SQL异常处理方法

    PL/SQL异常处理方法   1:什么是异常处理: PL/SQL提供一个功能去处理异常,在PL/SQL块中叫做异常处理,使用异常处理我们能够测试代码和避免异常退出. PL/SQL异常信息包含三个部分: ...

  6. Oracle数据库之PL/SQL过程与函数

    Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据 ...

  7. Oracle数据库之PL/SQL程序设计简介

    PL/SQL程序设计简介 一.什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写. ORACLE的SQL ...

  8. oracle系列(四)PL/SQL

    过程,函数,触发器是PL/SQL编写的,存储在oracle中的.PL/SQL是非常强大的数据库过程语言. PL/SQL优点:性能,模块化,网络传输量,安全性缺点:移植性不好 简单分类:块:过程,函数, ...

  9. 《oracle每日一练》免安装Oracle客户端使用PL/SQL

    免安装Oracle客户端使用PL/SQL Oracle客户端挺招人烦的,部署连接它的应用通常需要先安装它的客户端,安装程序要求在目标机器上写注册表,假设你没有洁癖的话,你仍可能被下面的事情绊住:当你的 ...

  10. Oracle 客户端安装 + pl/sql工具安装配置

    Oracle 客户端安装 +  pl/sql工具安装配置 下载oracle客户端,并在本地安装. 11g下载地址为: http://www.oracle.com/technetwork/databas ...

随机推荐

  1. DBA_Oracle Erp中某个Form需进行升级Patch详解(案例)

    2014-06-21 Created By BaoXinjian

  2. SDcard进行文件的读取

    平时我们需要在手机上面存储想音频,视频等等的大文件,以前学过使用File进行存储(使用File操作进行存储):由于考虑到手机本身的存储空间小,这时候我们需要把文件存储在SDcard中,今天自己也学习了 ...

  3. [C语言](一)第一个Windows 32 API的窗口程序

    #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain( ...

  4. WCF Windows Service Using TopShelf and ServiceModelEx z

    http://lourenco.co.za/blog/2013/08/wcf-windows-service-using-topshelf-and-servicemodelex/ There are ...

  5. 跨域请求 & jsonp

    0 什么是跨域请求 在一个域名下请求另外一个域名下的资源,就是跨域请求.example 1:比如:我当前的域名是http://che.pingan.com.我现在要去请求http://www.cnbl ...

  6. nyoj 103 A + B problem II

    点击打开链接 A+B Problem II 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 I have a very simple problem for you. G ...

  7. NYOJ 123 士兵杀敌4-树状数组的插线求点

    士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...

  8. [HDU 4821] String (字符串哈希)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4821 题目大意:给你M,L两个字母,问你给定字串里不含M个长度为L的两两相同的子串有多少个? 哈希+枚 ...

  9. (转)将access数据库迁移到SQLserver的两种方法

    在实际项目使用中遇到的问题,将原文整理后以备后用. 原文地址(具体链接几次未知):http://www.jb51.net/article/41956.htm 方法1 使用ACCESS2007自带的数据 ...

  10. MySQL游标学习总结

    游标的概念 在数据库中,游标是一个十分重要的概念.游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制.游标总是与一条 ...