首页 > 数据库 >Oracle执行块中的异常处理

Oracle执行块中的异常处理

时间:2023-11-11 11:34:47浏览次数:39  
标签:处理 预定 SQL Oracle 执行 异常 PL

PL/SQL异常处理是PL/SQL块中对执行部分出现异常进行处理的部分。PL/SQL采用的是统一异常处理机制,当异常发生时,程序会自动跳转到异常处理部分,交给异常处理程序进行异常匹配,再调用对应的处理方法。如果程序出现异常,而没有找到对应的异常处理程序,则程序会直接中断抛出异常。PL/SQL异常可以分为预定义异常、非预定义异常、自定义异常三种。

PL/SQL异常处理都在PL/SQL块的最下方,以EXCEPTION开始,其语句结构如下:

 

 

语法解析:

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

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

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

预定义异常

预定义异常Oracle数据库为我们预定义好开发过程当中经常出现的异常名称。Oracle一共提供了25种预定义异常名称,常用到的如我们使用select ...into语句进行赋值时,经常出现的NO_DATA_FOUND(select查询时无数据不能赋值给变量错误)、TOO_MANY_ROWS(查询返回记录不止一条,触发的错误)等。25种预定义异常,可以通过数据库语句查询,命令如下:

 

 结果如下:

 

 

案例1、测试预定义异常,代码如下:

 

 

非预定义异常

Oracle当中除了上面存在的25种预定义异常,更多存在的是非预定义的异常。也就是说,它们只存在错误编号和对应的错误信息,但是没有具体的错误名称的对应。虽然,Oracle数据库自己预定义了25种常见异常,但是对于其他异常,你可以选择为异常添加一个名称,使得它能够被异常处理模块进行捕获并抛出处理。

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

1、进行异常声明:声明一个异常名称。

2、进行异常名称和错误编号关联。

Oracle处理非预定义的异常和预定义异常的原理是一致的,非预定义异常只是自己给对应的Oracle错误编号起个自己的名字,而预定义异常是Oracle数据自己起的名字。

 

案例2、演示非预定义异常的编写,代码如下:

 

 

自定义异常

除了,上面的预定义异常外,Oracle还为开发者提供一个异常处理方式,那就是自定义异常,可以根据自己实际的业务需求和逻辑错误进行自定义异常,并通过逻辑控制主动抛出自定义异常交给对应的异常处理模块,进行异常处理。进行自定义异常的步骤如下:

1、异常声明定义:在PL/SQL块的声明部分采用关键字EXCEPTION定义异常名称。

2、异常主动抛出:在PL/SQL块中执行部分,通过逻辑控制,主动使用RAISE关键字抛出异常,交给异常处理模块处理。

 

案例3、自定义异常演示,代码如下:

标签:处理,预定,SQL,Oracle,执行,异常,PL
From: https://www.cnblogs.com/smarttony/p/17825704.html

相关文章

  • Maven打包项目时异常:Cannot access nexus-aliyun (http://maven.aliyun.com/nexus/con
    package是报错Cannotaccessnexus-aliyun(http://maven.aliyun.com/nexus/content/groups/public)inofflinemodeandtheartifactorg.apache.maven.surefire:maven-surefire-common:pom:2.22.2hasnotbeendownloadedfromitbefore.根据翻译的意思:无法在脱机模式下......
  • Grafana监控Oracle数据库的表大小等信息
    Grafana监控Oracle数据库的表大小等信息方案oracledb_exporter以及prometheusgrafana使用的SQL以及配置文件[[metric]]context="table_sizeinfo"labels=["table_nameinfo","table_tablespace"]metricsdesc={table_rownum="tablerownum&q......
  • 执行以下程序,输出结果为()
    执行以下程序,输出结果为()varone;vartwo=null;console.log(one==two,one===two);truefalse变量one只声明未赋值,所以其值为undefined,在使用“”对undefined和null进行比较时,不能将null和undefined转换成其他任何值,并且规定undefined==null返回结果为true,而使用“=......
  • 执行下面的代码, x 的值是 5
    执行下面的代码,x的值是5varstr='whatisthis';varx=str.search('is');search从左边第一个字符开始查找,此时下标为0.。is中i在第6个字符的位置,下标为5,所以返回5注意两个点:1.空格也算字符,2.下标从0开始。注释:如果没有找到任何匹配的子串,则返回-1。......
  • vue中执行npm install提示:npm WARN deprecated [email protected]
    场景:在执行npminstall时提示[email protected],导致安装不了 提示的意思是:版本低不再维护了,让升级upgradeyourdependenciestotheactualversionofcore-js.   [email protected]:core-js@<3.23.3isnolongermaintainedand......
  • python执行字段串代码
    很多时候,我们会让用户自己写代码,然后保持,需要的时候执行,这个时候,保持的代码是字符串,怎么执行呢,这里简单介绍一下1.eval如果是单行语句或者表达式可以使用eval执行,如:eval("2+4+5")2.exec如果是多行的代码,可以使用exec执行(可以使用变量,也可以产生变量),如:lenth=10code=......
  • 电脑自动更新后,出现白屏死机等异常情况,卸载最近更新的方法
          找到最近安装的更新,因为不确定是哪个更新导致的问题,先卸载一个,然后再使用,如果发现问题还存在,就继续卸载可以记录下每次卸载的更新    ......
  • exe可执行文件如何逆向?有那些逆向工具
    逆向工程是对已编译的可执行文件进行分析的过程,以理解其内部结构、功能和逻辑。逆向工程可执行文件通常用于安全研究、漏洞分析、软件破解等领域。下面是一些常用的逆向工具和技术,以及一般的逆向流程。逆向工具:IDAPro: IDAPro是一款强大的反汇编工具,用于分析和逆向各种可执......
  • 关于asyncio.create_task异步并发执行的研究
    关于asyncio.create_task异步并发执行的研究#不在乎结果版本asyncdefdo_some_thing(a,b):time.sleep(3)print(f"{datetime.datetime.now()}handledo_some_thingwitha:{a}andb:{b}")returna+bclassTaskHandler(tornado.web.RequestHandler):......
  • xixa oraclelinux上kafka集群部署(一)----kafka安装
    kafka部署前提:需要安装jdk1.7以上版本、zookeeper官网下载:http://kafka.apache.org/quickstartkafka配置配置server.properties文件中zookeeper配置,如果集群应该怎么配置?还需要尝试配置kafka集群             在bin目录下面执行......