oracle存储过程----异常的写法介绍

2023-11-18

上一篇 oracle存储过程—-case条件控制语句的用法

  oracle存储过程—-异常介绍

  参考PL/SQL ,存储过程中的异常来自于程序本身,也有的来自开发人员自定义的数据,而所有的这些错误我们称之为异常(编译时的错误不能称为异常)。
&esmp; 本篇介绍存储过程中对于异常的三种分类:

  1. 预定义异常。
  2. 非预定义异常。
  3. 自定义异常。
1、预定义异常

  oracle中为每个错误提供了一个错误号,而捕获异常则需要异常有名称,oracle提供了一些已经定义好名称的异常,这就是预定义异常。oracle一共提供了25种预定义异常。
  想要查看oracle预定义异常,输入下边的命令:

SELECT * FROM DBA_SOURCE WHERE NAME='STANDARD' AND TEXT LIKE '%EXCEPTION_INIT%'

  则会看到如下的结果,即所有的预定义异常:
这里写图片描述

预定义异常的捕获,只要名字与上图中的TEXT 里的 括号中字母下划线那部分,匹配一致即可。
比如如下:

create or replace procedure test_select_procedure
AS
v_ds ly_ds%rowtype;
BEGIN
   select * into v_ds from ly_ds;
   EXCEPTION  -- 由EXCEPTION开始
      WHEN TOO_MANY_ROWS THEN  --如果符合这个异常,则进入下边的执行
      DBMS_OUTPUT.PUT_LINE('返回结果超过一条');
END;

  上边的查询结果,返回多条记录,即符合了预定义异常中的TOO_MANY_ROWS ,则会进入该异常中的逻辑。
  异常的匹配从上而下,这一点注意。

2、非预定义异常

  oracle更多的是非预定异常。有些异常是只有错误编号和相关的错误描述,并没有名称,为了解决这一问题,oracle允许开发人员为这样的异常添加一个名称,使得它们能够被异常处理模块捕捉到。
  比如像下边的这个异常,ORA-12899,就是这种情况:

ORA-12899: 列 "ZNXD_GATEWAY"."LY_DS"."CREATE_TIME" 的值太大 (实际值: 149, 最大值: 50)

  它没有对应的异常名称,不属于预定义异常。

  解决办法就是,只需要将它的错误号码,与异常名称关联一下即可,例子写法如下:

create or replace procedure test_add_procedure
(id varchar,createtime varchar,name varchar,
age varchar,sex varchar)
AS
my_12899_exp exception; --定义一个异常,取名为my_12899_exp
--编译当前异常名,并与错误号对应
pragma exception_init(my_12899_exp,-12899); 
BEGIN
insert into ly_ds values(id,createtime,name,age,sex);
exception
  when dup_val_on_index then --不符合当前异常则继续匹配边的
  dbms_output.put_line('主键冲突');
  when my_12899_exp then  --符合该异常则进入执行
 dbms_output.put_line('内容超出存储范围');
end;

  执行如下,当把第二个字段的值设的超出存储范围后,会引发异常:

SET SERVEROUTPUT ON;
BEGIN
test_add_procedure('11','2018-09-081辅导费地方发地方的分担分担放到发地方地方','刘七','30','男');
END;

  输出结果如下:

匿名块已完成
内容超出存储范围
3、自定义异常

  如果有些并不属于系统错误,可能是因为某段业务逻辑,只是想让它抛出异常,像这种主动抛出异常的情况,就需要自定义异常了。
  异常都会有错误名称和错误号,自定义异常的时候,可以使用-20999~-20000 这个范围的数字作为错误号,不会引起冲突的。
  如下,数据库的内容:
这里写图片描述
  想要写一个,根据性别,匹配条数,如果大于一条,则抛出异常,这样的存储过程,如下:

create or replace procedure test_select2_procedure
(sex  varchar)
AS
countNum number(10); 
my_range_exp exception;  --声明一个异常,取名为my_range_exp
pragma exception_init(my_range_exp,-20001); --编译异常
BEGIN
    select count(*) into countNum from ly_ds where LY_NB=sex;
    if(countNum >1) then
        raise my_range_exp; --使用raise抛出异常
    end if;
    dbms_output.put_line(countNum);
    exception
        when my_range_exp then
        dbms_output.put_line('查询条数大于1,主动抛出异常');
END;

  当分别传入 两种参数时,结果如下:
  执行


SET SERVEROUTPUT ON;
BEGIN
test_select2_procedure('男');
END;

结果:

匿名块已完成
1

  执行

SET SERVEROUTPUT ON;
BEGIN
test_select2_procedure('女');
END;

结果:

匿名块已完成
查询条数大于1,主动抛出异常

下一篇,打算写事务,或者写mybatis调用存储过程的写法,写完之后放到这里

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oracle存储过程----异常的写法介绍 的相关文章

  • (电赛电源方向)怎么样从零开始准备全国大学生电子设计竞赛

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 电赛是什么 二 电源方向是什么 三 该怎么去学习电源方向的知识 1 博主的劝诫 2 硬件该准备些什么 3 软件该准备些什么 总结 前言 我建了一个群 分享
  • selenium 常用操作总结

    谷歌驱动下载 http chromedriver storage googleapis com index html 参数设置options opt Options opt add argument headless 无头模式 opt ad
  • 在腾讯连拿六个五星

    刚毕业入职腾讯工作 2 3 年 半年 年终绩效每次都是 5 4 星 不一定年薪百万 主要薪资 奖金无法决定 这个取决于股票是否上涨不少 但晋升肯定是最快的 在阿里拿 375 跟在腾讯拿 5 4 星的比例差不多 应届毕业能拿一次确实很优秀了
  • 15. unity官网资源商店的免费资源引入自己项目中

    1 说明 在unity开发中可以在官网引入一些免费的资源 免得自己找不到合适的素材 第一步 首先进入Unity资源商店官网 https assetstore unity com 计入并登录自己的unity账号 如果没账号 可以注册一个 然后
  • Fisco Bcos区块链五(WeBase结点前置服务)

    文章目录 区块链开荒 技术文档 https webasedoc readthedocs io zh CN latest docs WeBASE Front install html 三 WeBase节点前置服务 1 前提条件 2 拉取代码
  • AIGC驱动产品开发创新,改变你所知的一切!

    你是否想过 3000年后的饮料是什么味道 9月12日 可口可乐全球创意平台 乐创无界 再度推出全新限定产品 首款联合人工智能 AI 打造的无糖可口可乐 未来3000年 从口味研发到包装设计都体现了AI的深度参与打造 Y3000与AI共创这一
  • 实战: 跨年烟花代码的实现(附源码)

    目录 前言 一 pandas是什么 二 代码结构 1 介绍主html代码 2 js文件介绍 GameCanvas js script js 运行效果 前言 本文章将介绍跨年烟花代码的实现以及源代码 提示 以下是本篇文章正文内容 一 pand
  • 关于security权限的坑

    遇到了一个spring security的坑 分享给大家 首先介绍一下项目 spring boot 整合security 配合做权限与认证 如果数据库权限是ROLE USER 比如 那么在Security配置文件里 权限必须写出USER 也
  • 如何在vue 中使用 sass

    传送门
  • python中协程实现的本质以及两个封装协程模块greenle、gevent

    协程 协程 又称微线程 纤程 英文名Coroutine 协程是啥 协程是python个中另外一种实现多任务的方式 只不过比线程更小占用更小执行单元 理解为需要的资源 为啥说它是一个执行单元 因为它自带CPU上下文 这样只要在合适的时机 我们
  • Fun论设计模式之2:代理模式(Proxy Pattern)

    今天学习到了一个新的设计模式 代理模式 介绍借鉴了runoob的 意图 为其他对象提供一种代理以控制对这个对象的访问 主要解决 在直接访问对象时带来的问题 比如说 要访问的对象在远程的机器上 在面向对象系统中 有些对象由于某些原因 比如对象
  • LeetCode刷题-9

    数组 119 杨辉三角 II 题目描述 题目样例 Java方法 线性递推 思路及算法 代码 复杂度 题目描述 给定一个非负索引 rowIndex 返回 杨辉三角 的第 rowIndex 行 在 杨辉三角 中 每个数是它左上方和右上方的数的和
  • 训练后的网络输出为固定值

    缘起 之前训练好的网络 但是为了硬件移植 其中某些操作需要删除 那么简单 替换一些硬件不支持的操作 重新训练一下就好了 毕竟训练集 数据导入方式 训练代码 测试代码之前都验证了没有什么问题 但是问题来了 简单的训练一次 居然出现了输出结果成
  • jquery显示和隐藏 切换

  • 华硕笔记本没有无线服务器,华硕电脑搜不到wifi怎么回事

    华硕电脑搜不到wifi怎么回事 可能还有些网友不太了解 那么下面就由学习啦小编给你们介绍华硕电脑搜不到wifi的原因及解决方法吧 希望能帮到大家哦 华硕电脑搜不到wifi的解决分析一 1 首先点击桌面右下角的无线网络图标 打开网络和共享中心

随机推荐

  • shell 命令之wc

    wc命令很简单 就是统计指定文件中的字节数 字数 行数 并将统计结果显示输出 其命令及参数如下 wc lcmw file c 统计字节数 l 统计行数 m 统计字符数 如果本地不支持多字节字符 则和 c一样的效果 w 统计字数 一个字被定义
  • python 格式化

    一 格式化方式 1 使用 进行格式化 2 使用f str 进行格式化 3 使用str format进行格式化 二 格式化的使用 1 使用 进行格式化 定义以下变量 name Tom age 17 weight 58 9871 book 10
  • python装饰器计算函数运行时间

    import time from functools import wraps import random def fn timer function wraps function def function timer args kwarg
  • Zookeeper和Nacos的区别

    Zookeeper和Nacos的区别 在分布式系统中 注册中心充当着重要角色 是服务发现 客户端负载均衡中不可缺少的一员 注册中心除了能够实现基本的功能外 他的稳定性 可用性和健壮性对整个分布式系统的流畅运行影响重大 zookeeper和n
  • 如何写论文

    维生素C吃多了会上火 个人CSDN博文目录 AI论文精度 这篇博客讲解的是如何写文章 写论文异曲同工 参考书籍The Craft of Research 参考视频跟读者建立联系 研究的艺术 一 目录 书本目录 1 跟读者建立联系 如何权衡项
  • OpenCV——多分辨率LBP的计算方法

    目录 一 算法原理 1 原理概述 2 参考文献 二 代码实现 三 结果展示 一 算法原理 1 原理概述 基本LBP算子虽然在早期的实验中取得了一系列成果 但是应用于不同领域的具体问题时 该算子的处理结果并不能达到预期的效果 因此 很多学者对
  • 不同网段共享文件服务器,不同网段ip 如何设置局域网共享?

    具体操作如下 执行 开始 I 控制面板 命令 在打开的窗口中双击 网络和丨nternet连接 选项 打开 网络连接 窗口 在窗口左边的 网络任务 栏中选择 更改此连接设置 选项 弹出 本地连接属性 对话框 单击 安装 按钮 在win7弹出的
  • .NET 6 ‘Unable to configure HTTPS endpoint...

    Mac M1 NET 6 Exception has occurred CLR System InvalidOperationException System InvalidOperationException 类型的未经处理的异常在 Sy
  • 蓝桥杯 c/c++ 算法提高 最长滑雪道

    算法提高 最长滑雪道 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 小袁非常喜欢滑雪 因为滑雪很刺激 为了获得速度 滑的区域必须向下倾斜 而且当你滑到坡底 你不得不再次走上坡或者等待升降机来载你 小袁想知道在某个区域中最
  • CSS(非)实用技巧——背景与边框

    参考 CSS揭秘 CSS Secrets 背景 CSS3 尽管 CSS3 这个名词非常流行 但它严格意义上并不是一个规范 因为在CSS2之后 CSS这门语言已经庞大到无法放进单个规范中了 CSS工作组将其分成不同的模块 其中在CSS2 1已
  • 图书馆数据库服务器设备性能分析,高校图书馆数据库利用率统计与绩效的浅析.doc...

    PAGE PAGE 1 高校图书馆数据库利用率统计与绩效的浅析 摘要 现代的社会是一个信息社会 社会经济发展步伐和高科技信息技术的发展已经超过了我们想象的能力范围 随着越来越多的高校图书馆的建立 为了更好的服务学生和学校教师的教学 科研工作
  • 线程的优先级

    package com kuang Demo05 测试线程的优先级 public class TestPriority public static void main String args System out println Threa
  • Eclipse 从Debug模式中退出

    如果您尚未处于Java透视图中 请在主菜单中选择Window gt Open Perspective gt Java或单击下面的 Click to Perform 链接 Eclipse的右侧有新手教学 简单来说就是菜单栏里按顺序点击 就能切
  • tensorflow-gpu版本详细安装教程(Win10,Python3.7.9,cuda11.2,cudnn8.1.0)

    目录 cuda安装 cudnn安装 python安装 tensorflow安装 cuda安装下载 首先要注意自己的显卡支持cuda的版本 可以这样自查 可以看到适合自己的cuda版本 这里我选择了cuda11 2版本 cuda安装包下载链接
  • 虚拟机与物理机的三种连接方式

    引言 vmware为我们提供了三种网络工作模式 它们分别是 Bridged 桥接模式 NAT 网络地址转换模式 Host Only 仅主机模式 我们在刚刚接触它们的时候 常常被搞的晕头转向 今天我就为大家介绍一下这三种连接方式 桥接模式 桥
  • web前台传递时间日期格式转换为java.util.date,initBinder或者@DateTimeFormat方式

    方法1 根据前台传递的日期格式 在后台创建一个参数绑定的方法 将对应的日期字符串 转换为 java util date 从界面传递参数到spring后台controller类中 日期格式默认只能传long类型的时间戳 如果想要传递格式化的日
  • 阿里云ECS部署Nginx配置域名访问

    目录 前言 环境 具体步骤 服务器 域名 SSL证书 Nginx配置 前言 记录下阿里云服务器建站的过程 回回建 回回忘 尴尬 环境 ECS Centos7 6 Nginx 具体步骤 服务器 首先 需要购买一台服务器 域名 需要购买一个域名
  • Python unicode equal comparison failed

    用python进行判断的时候 如果包含中文会报错 name 这里是中文 if i name print right 修改成 name 这里是中文 decode utf 8
  • 聊聊undefined 和 undeclared

    一 undefined 在Js中 有两个表示 空 的值undefined和null 其中比较有用的是 undefined undefined 是一个值为 undefined 的类型 JavaScript语言也定义了一个全局变量 它的值是 u
  • oracle存储过程----异常的写法介绍

    上一篇 oracle存储过程 case条件控制语句的用法 oracle存储过程 异常介绍 参考PL SQL 存储过程中的异常来自于程序本身 也有的来自开发人员自定义的数据 而所有的这些错误我们称之为异常 编译时的错误不能称为异常 esmp