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

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

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

-------违背了参考性约束

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

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

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

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

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

SQL> declare
2 e_emp_err exception;
3 pragma exception_init( e_emp_err ,-1422);
4
5 v_sal emp.sal%type;
6
7 begin
8 select sal into v_sal from emp where deptno=&no;
9 commit;
10 exception
11 when e_emp_err then
12 dbms_output.put_line (' Return rows more than one row !');
13 when others then
14 dbms_output.put_line ('Others error !');
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. 使用MyEclipse可视化开发Hibernate实例

    2.7  使用MyEclipse可视化开发Hibernate实例 2.7节的例子源代码在配套光盘sourcecode/workspace目录的chapter02_first项目中. 这个实例主要演示如 ...

  2. 黄聪:Wordpress、PHP使用POST数据过大导致MySQL server has gone away报错原因分析

    错误原因: 当POST的数据超过 max_allowed_packet 就会报 MySQL server has gone away 的错误. 1.查看当前Mysql的 max_allowed_pac ...

  3. PLSQL_闪回操作2_Fashback Version Query

    2014-12-09 Created By BaoXinjian

  4. HUST 1010 The Minimum Length(KMP,最短循环节点,即i-Next[i])

    题意: 有一个字符串A,假设A是“abcdefg”,  由A可以重复组成无线长度的AAAAAAA,即“abcdefgabcdefgabcdefg.....”. 从其中截取一段“abcdefgabcde ...

  5. 502 bad gateway 可能的错误原因

    1.PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间 #http代码段中增加 fastcgi_connect_timeout ...

  6. 在windows下添加php的Imagick扩展

    安装ImageMagick-6.9.2-6-Q16-x64-dll.exe 将安装目录下的CORE_开头的dll文件和X11.dll文件复制到c:\windows\system32\下, 在windo ...

  7. 读取缓存模拟----FIFO

    本例是模拟缓存的存储和读取. 存储:使用一个Map来存放,key是文件名,值为缓存对象 读取:返回相应的key对应的缓存.(如果缓存被修改,就重新加载缓存,再从缓存Map中读取相应缓存) 测试类:每2 ...

  8. ubuntu 16.04 64bit安装 Julia

    sudo add-apt-repository ppa:staticfloat/juliareleases sudo add-apt-repository ppa:staticfloat/julia- ...

  9. 解决docker不能下载镜像

    试了很多办法.用ss,vpn,都不行. 修改 /etc/default/docker的方式貌似在 1.12不好使了.最后找到和这个办法 http://blog.csdn.net/gsying1474/ ...

  10. VisualStudio使用小技巧——快捷键(转)

    1. 怎样调整代码排版的格式?选择:编辑—>高级—>设置文档的格式或编辑—>高级—>设置选中代码的格式.格式化cs代码:Ctrl+k+f 格式化aspx代码:Ctrl+k+d2 ...