百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 数据库教程 > 正文

了解 PL/SQL 的异常处理(sql数据库异常处理)

oygpt 2024-09-23 12:17 124 浏览 0 评论

6. PL/SQL 的异常处理

在程序运行时出现的镇误,称为异常。发生异常后语句将停止执行,PL/SQL 引擎立即将控制权转到PL/SQL块的异常处理部分。异常处理机制简化了代码中的错误检测。PL/SQL中任何异常出现时,每一个异常都对应一个异常码和异常信息。比如:

预定义异常

为了Oracle 开发和维护的方便,在Oracle 异常中,为常见的异常码定义了对应的异常名称,称为预定义异常,常见的预定义异常有:

PL/SQL中用EXCEPTION 关键字开始异常处理。具体语法是:

BEGIN

--可执行部分

EXCEPTION --异常处理开始

PL/SQL

WHEN 异常名1THEN

--对应异常处理

WHEN 异常名2THEN

--对应异常处理

........

WHEN OTHERS THEN

--其他异常处理

END;

说明:

异常发生时,进入异常处理部分,具体的异常与若干个WHEN 子句中指明的异常名匹配,匹配成功就进入对应的异常处理部分,如果对应不成功,则进入 OTHERS 进行处理。

代码演示:异常处理

SQL> DECLARE

2 newsal emp.sal % TYPE;

3 BEGIN

4 uums-Output.put-line(’禾知异常’) ;

1O END⊥

返回的记录太多了

PL/SQL procedure successfully completed

自定义异常

除了预定义异常外,用户还可以在开发中自定义异常,自定义异常可以让用户采用与PL/SQL 引擎处理错误相同的方式进行处理,用户自定义异常的两个关键点:

> 异常定义:在 PL/SQL 块的声明部分采用 EXCEPTION 关键字声明异常,定义方法与定义变量相同。比如声明一个 myexception 异常方法是:

myexception EXCEPTION;

> 异常引发:在程序可执行区域,使用RAISE关键字进行引发。比如引发myexception方法是:

RAISE myexception;

代码演示:自定义异常

SQL> DECLARE

2 sal emp.sal%TYPE;

3 myexp EXCEPTION;①

4 BEGIN

5 SELECT sal INTO sal FROM emp WHERE ename='JAMES';

6 IF sal<5000 THEN

7 RAISE myexp; ②

8 END IF;

9 EXCEPTION

10 WHEN NO DATA FOUND THEN

11 dbms_output.put_line('NO RECORDSET FIND!');

12 WHEN MYEXP THEN ③

13 dbms_output.put_line('SAL IS T○ LESS!');

14 END;

15 /

SAL IS TO LESS!

PL/SQL procedure successfully completed

代码解析:

① 用EXCEPTION 定义一个异常变量myexp。

② 在一定条件下用RAISE 引发异常myexp。

③ 在异常处理部分,捕获异常,如果不处理异常,该异常就抛给程序执行者。

引发应用程序异常

在oracle 开发中,遇到的系统异常都有对应的异常码,在应用系统开发中,用户自定义的异常也可以指定一个异常码和异常信息,oracle 系统为用户预留了自定义异常码,其范围介于-2000 到-20099 之间的负整数。引发应用程序异常的语法是法是:

RAISE_APPLICATION_ERROR(异常码,异常信息)

代码演示:引发应用系统异常

SQL> DECLARE

2 sal emp.sal%TYPE;

3 myexp EXCEPTION ;

4 BEGIN

5 SELECT sal INTO sal FROM emp WHERE ename='JAMES';

6 IF sal<5000 THEN

7 RAISE myexp;

8 END IF;

9 EXCEPTION

10 WHEN NO_DATA_FOUND THEN

11 dbms_output.put_line('NO RECORDSET FIND!');

12 WHEN MYEXP THEN

13 RAISE APPLICATION ERROR(-20001,'SAL IS TO LESS!'); ①

14 END;

15 /

ORA-20001: SAL IS TO LESS! ②

ORA-06512:在line 14

代码解析:

① 引发应用系统异常,指明异常码和异常信息。

② 在控制台上显示异常码和异常信息。

如果要处理未命名的内部异常,必须使用OTHERS 异常处理器。也可以利用PRAGMA EXCEPTION_ INIT 把一个异常码与异常名绑定。

PRAGMA 由编译器控制,PRAGMA 往编译时处理,而不是在运行时处理。EXCEPTION INIT告诉编译器将异常名与ORACLE 错误码绑定起来,这样可以通过异常名引用任意的内部异异常,并且可以通过异常名为异常编写适当的异常处理器。PRAGMA EXCEPTION_INIT 的语法是:

PRAG MA EXCEPTION_INIT(异常名,异常码)

这里的异常码可以是用户自定义的异常码,也可以是Oracle 系统的异常码。

赢在团队,开发路上,你不是一个人在前进!分享来自兆隆IT云学院,QQ:598756835

相关推荐

PLSQL 命令行模式常见错误(plsql执行命令行)

日常运维过程中,经常使用PLSQL的command模式运行SQL脚本,对于一些常见的错误,你知道原因在哪里吗?1.SQL脚本执行后弹出输入框原因:SQL*PLUS默认环境里会把'&字符'...

了解 PL/SQL 的异常处理(sql数据库异常处理)

6.PL/SQL的异常处理在程序运行时出现的镇误,称为异常。发生异常后语句将停止执行,PL/SQL引擎立即将控制权转到PL/SQL块的异常处理部分。异常处理机制简化了代码中的错误检测。PL/SQ...

PL/SQL 泛型编程详解(泛型调用)

PL/SQL中的通用函数,也称为泛型函数,是一种可以接受任意数据类型参数的函数。这使得开发者能够编写可重用的代码,以处理不同的数据类型,而无需为每种数据类型编写专门的函数。PL/SQL的泛型函数通过使...

PL/pgSQL编写postgresql函数之基本语句

目录基本语句1赋值赋值运算符:=或=2单一行结果返回SELECT...INTO语法赋值更新操作结果返回3多行结果返回方式一:使用表充当容器方式二:使用自定义TYPE充当容器方式三:ret...

PLSQL安装教程(plsql安装教程及配置)

2.安装,双击上图Plsqldev.exe文件;3.单击确定,进行下一步安装;4.软件询问是否遵守协议,单击“IAgree”,进行下一步安装;5.选择软件安装在计算机中的路径,(客户端的安装...

PL/SQL字符函数概览(sqlplus 字符集)

PL/SQL提供了一系列内置的字符函数,这些函数可以对字符串进行各种操作,如转换、比较、搜索和替换等。以下是一些常用的PL/SQL字符函数及其用法示例:CONCAT:连接两个或多个字符串。示例:DEC...

instantclient + PLSQL安装与配置小结

一、软件1、instantclient-basic-windows.x64-11.2.0.4.0.zip到官网下载。2、PLSQLDeveloper13.rar到网上下载,找破解版的,网上有V...

如何使用 PL/SQL 块 ?(pl/sql 使用教程)

2.PL/SQL块PL/SQL是一种块结构的诺言,一个PL/SQL程序包含了一个或者多个逻辑块,逻辑块中可以声明变量,变量在使用之前必须先声明。除了正常的执行程序外,PL/SQL还提供了专门的异...

PL/SQL(Procedural Language(procedural objects)

PL/SQL(ProceduralLanguage/StructuredQueryLanguage)是由OracleCorporation开发的一种用于与Oracle数据库配合使用的编...

Oracle数据库扩展语言PL/SQL之块结构

【本文详细介绍了Oracle数据库扩展语言PL/SQL的块结构,欢迎读者朋友们阅读、转发和收藏!】1基本概念1.1PL/SQL块结构块(block)是PL/SQL的基本程序单元,编写P...

记一次生产数据库sql优化案例--with用法改写(11分钟优化到7秒)

概述前段时间开发丢了一个超长的sql给我,说需要优化,因为太长,连PL/SQL的美化工具都美化不了...下面简单记录一下优化的过程。with改写WITHAS短语,也叫做子查询部分(subquery...

如何在生产库与测试库做数据结构对比--PL/SQL工具

概述领导要求做个数据库之间的数据结构对比,这里我简单用PL/SQL工具来实现,下面介绍下使用过程。功能PLSQLDeveloperTools菜单下有CompareUserObjects和Com...

PLSQL使用教程——(1)基本使用教程

一、登录1、在这里配置好数据库服务,之后就可以登录了2、输入用户名和密码,并选择之前配置好的数据库服务。我这服务名取为localhost。(这个名字随意起。)二、创建表空间1、在SQL窗口中执行以下S...

PL/SQL调试存储过程?看这篇就够了

概述虽然现在存储过程相对比较少用了,但是平时接触不可避免的要跟存储过程打交道,当需要自己写的时候总会碰到这或那的错误,这个时候一般要怎么调试呢?PL/SQL调试PL/SQL中提供了【调试存储过程】的功...

IT运维基础篇之oracle sqlldr数据批量导入,比plsqldev还简单

在oralce中导入数据的方式有很多,比如:PL/SQL文本导入器、对表forupdate之后直接复制粘贴等等,导入方式有很多,今天我们介绍另一种大批量数据导入方式:sqlldr,具体其用法可以上网查...

取消回复欢迎 发表评论: