首页 > 数据库 >8.PL/SQL异常处理

8.PL/SQL异常处理

时间:2022-12-15 17:23:20浏览次数:49  
标签:exception -- when sex ls SQL 异常 PL

语法结构

declare
--声明部分
begin
--执行部分
exception
--异常部分
when  exception1 then 
--异常1处理程序
[when exception2  then 
--异常2处理程序 ]
[when others then 
--其它异常处理程序 ]
end;

语法解析
1、exception是异常处理部分开始的标志。

2、when后面是跟着异常的名称, then后面是对应异常处理程序。也就是当异常exception1出现时,执行的是异常1处理程序。其它异常程序不会进入。

3、when others then 指的是异常再前面异常捕获中未捕获到对应的异常处理程序,则全部进入其它异常处理程序进行异常处理。

1.预定义异常

Oracle一共提供了25种预定义异常名称

select *  from dba_source t where t.TEXT like '%EXCEPTION_INIT%' AND NAME='STANDARD';

案例:测试预定义异常

declare
ls_stuinfo stuinfo%rowtype;
begin
  select t.* into ls_stuinfo
    from stuinfo t
   where t.stuid='SC2018010061';
   --该学号找不到对应的学生 
exception
  when no_data_found  then
     dbms_output.put_line('该学生在学生信息表中找不到');
end;

2.非预定义异常

定义非预定义异常,可以分为两步走:

  1. 进行异常声明:声明一个异常名称
  2. 进行异常名称和错误编号关联

案例:演示非预定义异常的编写

declare
  ex_only exception;--声明一个异常名称
  PRAGMA EXCEPTION_INIT(ex_only,-00001);--主键唯一性错误
begin
   update  stuinfo t set t.stuid='SC201801005'     
   where t.stuid='SC201801006'; 
exception
  --捕获异常
  when ex_only  then
     dbms_output.put_line('该学号已经存在,不应许修改');
  when others then 
     dbms_output.put_line(sqlerrm);  
end;

3.自定义异常

进行自定义异常的步骤:
1.异常声明定义:在PL/SQL块的声明部分采用关键字exception定义异常名称
2.异常主动抛出:在PL/SQL块中执行部分,通过逻辑控制,主动使用raise关键字抛出异常,交给异常处理模块处理

案例:自定义异常演示

declare
  ex_check_sex exception;--声明一个异常名称
  ls_sex stuinfo.sex%type;
begin
   select t.sex into ls_sex from stuinfo t where t.stuid = 'SC201801006';
   dbms_output.put_line('该学生的性别是:'||ls_sex);--1:男,2:女
   if ls_sex not in ('1','2') then
     --性别不是1或者2主动抛出异常 
     raise ex_check_sex;
   end if;       
  
exception
  --捕获异常
  when ex_check_sex  then
     dbms_output.put_line('性别只能是男或者女');
  when others then 
     dbms_output.put_line(sqlerrm);  
end;

标签:exception,--,when,sex,ls,SQL,异常,PL
From: https://www.cnblogs.com/mxx520/p/16985590.html

相关文章

  • 盘点现在用的SqlServer 5种分页方式和拉姆达表达式分页,进来看看吧。
    现在基本上大家都在使用各种轮子自带的分页,大家是否还记得sql分页怎么写?今天我们就来盘一盘怎么写和用哪种方式写。欢迎大家评论区讨论。1、ROW_NUMBER()OVER()方式(SQL......
  • k8s创建MySQL
    Kubernetes创建MysQL整体流程:创建数据存储PV、PVC;创建MySQL数据库、创建访问入口Service;导入测试数据库test-db创建数据存储PV、PVC这里我们使用nfs作为storageclass......
  • 嵌入式数据库 sqllite & h2  utils
    使用场景:简单脚本,但是有需要数据记录.(使用前升级下版本)     我的使用:老机器,老项目,jkd6, 需要记录 SqlLiteUtilspackagecom.icil.edi.listener......
  • ORM执行SQL 双下划线查询 ORM外键字段创建 外键字段相关操作 ORM跨表查询 跨表查询进
    目录ORM执行SQL语句方式1:使用pymysql模块方式2:使用raw方法方式3:djangoconnection双下划线查询__gt(>)__lt(<)queryset对象特性__gte(≥)__lte(≤)__in__range__cont......
  • SQL的使用总结
    select*fromempselect*fromdeptselect*fromjobselect*fromsalarygrade--1.查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述SELECT t1......
  • JavaconfigApplicationTests
    packagecom.example.demo;importcom.example.demo.config.JavaConfig;importcom.example.demo.model.Printer;importorg.junit.Test;importorg.junit.runner.Ru......
  • vite plugin
    //自定义插件./plugins/fullImportPluginimport*aspathfrom'path'importtype{Plugin,ResolvedConfig}from'vite'exportdefaultfunctionfullImportPl......
  • MySQL数据管理
    MySQL数据管理1.外键(了解)在创建表的时候,增加约束CREATETABLE`grade`( `gradeid`INT(10)NOTNULLAUTO_INCREMENTCOMMENT'年级id', `gradename`VARCHAR(50)N......
  • SQL优化篇之-如何减少耗时查询的调用次数
    背景在查询语句中,如果Select子句中,调用较为耗时的函数或子查询,比较各种SQL语句的编写方案,得出其中最优选择。一、数据准备,SQL语句模拟较耗时的用户函数或子查询......
  • mysql binlog日志自动清理及手动删除
    说明当开启mysql数据库主从时,会产生大量如mysql-bin.00000*log的文件,这会大量耗费您的硬盘空间。如:mysql-bin.000001mysql-bin.000002mysql-bin.000003mysql-bin.0......