由用户自己定义
1、定义异常名称,类型exception
2、举出异常(raise excepttion)
3、捕获异常

  1. SQL> declare
  2. 2 e_user_err exception;
  3. 3 v_deptno dept.deptno%type := &no;
  4. 4 begin
  5. 5 update dept set loc='HongKong' where deptno=v_deptno;
  6. 6
  7. 7 if sql%notfound then
  8. 8 raise e_user_err;
  9. 9 end if;
  10. 10 commit;
  11. 11 exception
  12. 12 when e_user_err then
  13. 13 dbms_output.put_line('This department '||v_deptno|| ' is not in dept table ,please input correct number !');
  14. 14 end;

非预定义异常,通过oracle ORA-XXXX错误代码,建立异常捕获!

  1. -------违背了参考性约束
  2.  
  3. declare
  4. e_emp_remain exception;
  5. pragma exception_init( e_emp_remain ,-2292);
  6.  
  7. v_deptno dept.deptno%type :=&no;
  8.  
  9. begin
  10. delete from dept where deptno=v_deptno;
  11. commit;
  12. exception
  13. when e_emp_remain then
  14. dbms_output.put_line ('Don''t remove this '||v_deptno||' department !'||' , This record is in emp !');
  15. when others then
  16. dbms_output.put_line ('Others error !');
  17. end;
  1. SQL> declare
  2. 2 e_emp_remain exception;
  3. 3 pragma exception_init( e_emp_remain ,-2291);
  4. 4
  5. 5 v_empno emp.empno%type :=&n;
  6. 6 v_deptno emp.deptno%type :=&nn;
  7. 7
  8. 8 begin
  9. 9 update emp set deptno=v_deptno where empno=v_empno;
  10. 10 commit;
  11. 11 exception
  12. 12 when e_emp_remain then
  13. 13 dbms_output.put_line ('Department is not exists !');
  14. 14 when others then
  15. 15 dbms_output.put_line ('Others error !');
  16. 16 end;

获取others中错误代码和错误信息:

sqlcode: oracle 错误代码 sqlerrm: oracle 错误信息

  1. SQL> declare
  2. 2 v_code errors.code%type;
  3. 3 v_msg errors.msg%type;
  4. 4 v_sal emp.sal%type;
  5. 5
  6. 6 begin
  7. 7
  8. 8 select sal into v_sal from emp where deptno=&no;
  9. 9
  10. 10 exception
  11. 11 when no_data_found then
  12. 12 dbms_output.put_line('No this department ID');
  13. 13 when others then
  14. 14 dbms_output.put_line('Others error ');
  15. 15 v_code := sqlcode;
  16. 16 v_msg := sqlerrm;
  17. 17 dbms_output.put_line(v_msg);
  18. 18
  19. 19 insert into errors values(v_code,v_msg);
  20. 20 commit;
  21. 21 end;

通过捕获的代码建立非预定义异常:

  1. SQL> declare
  2. 2 e_emp_err exception;
  3. 3 pragma exception_init( e_emp_err ,-1422);
  4. 4
  5. 5 v_sal emp.sal%type;
  6. 6
  7. 7 begin
  8. 8 select sal into v_sal from emp where deptno=&no;
  9. 9 commit;
  10. 10 exception
  11. 11 when e_emp_err then
  12. 12 dbms_output.put_line (' Return rows more than one row !');
  13. 13 when others then
  14. 14 dbms_output.put_line ('Others error !');
  15. 15 end;

【PL/SQL练习】自定义异常的更多相关文章

  1. PL\SQL结构控制、异常

    PL\SQL结构控制    1.IF条件控制语句(三种基本方式+IF语句的嵌套使用)        (1)IF...        (2)IF...ELSE        (3)IF...ELSIF. ...

  2. Oracle学习笔记十 使用PL/SQL

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...

  3. 【Java EE 学习 29 上】【PL/SQL】【存储过程】【存储函数】【触发器】

    一.PL/SQL简介 1.概念:PL/SQL语言是Oracle数据库专用的一种高级程序设计语言,是对标准SQL语言进行了过程化扩展的语言. 2.功能:既能够实现对数据库的操作,也能够通过过程化语言中的 ...

  4. Oracle中PL/SQL的执行部分和各种流程控制

    Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...

  5. Oracle PL/SQL

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...

  6. PL/SQL异常处理

    As we all known,程序的错误一般分为两类:编译错误和运行时错误.其中运行时错误被称为异常.PL/SQL语句块中处理异常的部分即为异常处理部分.在异常处理部分,可以指定当特定异常发生时所采 ...

  7. PL/SQL异常处理方法

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

  8. [Oracle] PL/SQL学习笔记

    -- 1. 使用一个变量 declare -- Local variables here v_name ); begin -- Test statements here select t.user_n ...

  9. 整理课堂笔记 pl/sql orcale异常

      1>>>>>异常错误处理 1 >预定义的异常处理 预定义说明的部分 ORACLE 异常错误对这种异常情况的处理,只需在PL/SQL块的异常处理部分,直接引用相应 ...

  10. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

随机推荐

  1. android学习笔记十——TabHost

    TabHost——标签页 ==> TabHost,可以在窗口放置多个标签页,每个标签页相当于获得了一个与外部容器相同大小的组件摆放区域. 通过此种方式可以实现在一个容器放置更多组件(EG:通话记 ...

  2. [rootfs]Yaffs2

    1. busybox: sudo apt-get install busybox(v1.21.1) 2. mkyaffs2image: http://www.aleph1.co.uk/gitweb/? ...

  3. hibernate 大对象映射

    1. 在pojo类中 用Blob类和Clob public class Student { private int id; private String name; private int age; ...

  4. Chrome开发者工具详解(2)

    Chrome开发者工具面板 面板上包含了Elements面板.Console面板.Sources面板.Network面板.Timeline面板.Profiles面板.Application面板.Sec ...

  5. 基于HTML5的多张图片上传

    图片上传之前也有写过demo,不过是单张上传的,最近有个业务需求是需要多张上传的,于是乎从新改写了一下 HTML结构: 1 2 3 4 <div class="container&qu ...

  6. Porlet标准:JSR168/JSR286/WSRP(转载)

    From:http://www.iteye.com/topic/620213 Portlet标准主要是JSR168,JSR286和WSRP. JSR168因为比较早,所以大部分的Portal都支持这个 ...

  7. Python补充03 Python内置函数清单

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. Python内置(built-in)函数随着python解释器的运行而创建.在Pytho ...

  8. Stream语法详解

    1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...

  9. java小程序

    1.水仙花数 这个数等于它的每位数的立方和 (三位数) 示例一: int i; int j; int k; for (i=1;i<=9;i++) { for (j=0;j<=9;j++){ ...

  10. [Flex] ButtonBar系列——labelFunction用户提供的函数,在每个项目上运行以确定其标签

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...