【PL/SQL练习】自定义异常

由用户自己定义
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;
时间: 2024-12-28 16:06:44

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

PL/SQL中自定义异常小知识

一.概念 用户定义的异常错误是通过显式使用 RAISE 语句来触发.当引发一个异常错误时,控制就转向到 EXCEPTION块异常错误部分,执行错误处理代码. 对于这类异常情况的处理,步骤如下 : 在PL/SQL 块的声明部分定义异常情况 :<异常情况>  EXCEPTION; RAISE <异常情况> 在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理. 二.程序 --例1:使用自定义异常变量 DECLARE   v_empno emp.empno%TYPE :=&

Oracle学习笔记十 使用PL/SQL

PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构,可用于创建存储过程.触发器和程序包,给SQL语句的执行添加程序逻辑,与 Oracle 服务器和 Oracle 工具紧密集成,具备可移植性.灵活性和安全性. PL/SQL 的优点 支持 SQL,在 PL/SQL 中可以使用: 1.数据操纵命令 2.事务控制命令 3.游标控制 4.

oracle 学习笔记之PL/SQL程序设计

1.PL/SQL的定义: PL/SQL(Procedure Language/SQL) PLSQL是Oracle对sql语言的过程化扩展 指在SQL命令语言中增加了过程处理语句(如分支.循环等),使SQL语言具有过程处理能力. 把SQL语言的数据操纵能力与过程语言的数据处理能力结合起来,使得PLSQL面向过程但比过程语言简单.高效.灵活和实用. Plsql(oracle),Transact-sql(SQL server) 2.入门程序-->打印hello world; set serverout

PL/SQL 总结

一..基本语法 PL/SQL的结构块如下: declare --声明变量.类型.游标 begin --程序执行的部分,类似main方法 exception --针对异常,提供如何处理的机制 --when ....then.... end; 注意,没有用的部分,就 不需要写,比如程序的确是没有异常要处理,那么exception就不写 建议的命名方法: 标识符  命名规则 例子 程序变量  V_name V_name 程序常量  C_Name C_company_name 游标变量        

[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) ——通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)            [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之

PL/SQL 编程(二)

1    For循环 语法:begin for i in reverse 1..10 loop insert into users values(i,'奥巴马'): end loop: end; 注意:循环变量 i 是隐含增加的,所以无法看到 2    goto语句 goto 语句用于跳转到特定的位置去执行语句.由于goto语句会减少程序的可读性,所以一般情况下 不建议使用goto语句 3    null语句 null语句不会执行任何操作,但是可以增加程序的可读性 4    创建返回值是一个结果

Oracle 学习笔记 17 -- 异常处理(PL/SQL)

程序在执行过程中出现异常是正常的,在程序的编写过程中出现异常也是不可避免的.但是要有相应的异常处理的机 制,来保证程序的正常执行.PL/SQL程序执行过程中出现的错误,称为异常.一个优秀的程序都应该能够正确处理 各种出错的情况,并尽可能的从错误中恢复.PL/SQL提供了异常处理机制. 概念: 异常处理(exception)是用来处理正常执行过程中未预料的事件,程序块的异常处理定义的错误和自定义的错误, 由于PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会异常的终止. 有三种类型的错误

PL/SQL教程(转)

课程 一 PL/SQL 基本查询与排序 本课重点:   1.写SELECT语句进行数据库查询   2.进行数学运算   3.处理空值   4.使用别名ALIASES   5.连接列   6.在SQL PLUS中编辑缓冲,修改SQL SCRIPTS   7.ORDER BY进行排序输出.   8.使用WHERE 字段. 一.写SQL 命令:     不区分大小写.     SQL 语句用数字分行,在SQL PLUS中被称为缓冲区.     最后以:或 / 结束语句.     也可以用RUN来执行语

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

Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: set serveroutput on; accept abc prompt '请输入abc的值'; DECLARE a int:= &abc; BEGIN dbms_output.put_line(a); END; 查询赋值举例: set serveroutput on; DECLARE str

Oracle实践--PL/SQL基础之代码块

PL/SQL基础入门之代码块 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 优点: 1.       支持SQL,可以使用:DML,DCL,游标控制和SQL运算符 2