PL/SQL学习笔记-异常处理

简介: 一:预定义异常错误先看代码: declare mytitle labor.xland.title%type; begin select title into mytitle from labor.

一:预定义异常错误
先看代码:

declare 
mytitle labor.xland.title%type;
begin
select title into mytitle from labor.xland where state = 2;
dbms_output.put_line(mytitle);
exception
when no_data_found then
dbms_output.put_line('没有找到数据');
end;


这段程序当检索到数据的时候就输出数据
检索不到数据即输出  没有找到数据
no_data_found 是一个预定义异常错误类型
更多预定义异常错误,请看:
http://www.cnblogs.com/liulun/articles/1526177.html


二:非预定义异常错误
先看代码:

declare 
v_sqlcode number;
v_sqlerrm varchar2(2048);
begin
insert into labor.xland values(null,'1111',1);
exception
when no_data_found then
     dbms_output.put_line('没有找到数据');
when others then
     if sqlcode = -1400 then
        v_sqlcode := sqlcode;
        v_sqlerrm := sqlerrm;
        dbms_output.put_line(to_char(v_sqlcode));
        dbms_output.put_line(v_sqlerrm);
     end if;
end;

when 块不必跟end结束
if块需跟end if结束
sqlcode为错误码
sqlerrm为oracle反馈的错误信息
此程序输出:

-1400
ORA-01400: 无法将 NULL 插入 ("LABOR"."XLAND"."TITLE")

另外还有pragma exception_init(name,errcode)函数来处理非预定义异常
如:

declare 
v_exception exception;
pragma exception_init(v_exception,-1400);
begin
insert into labor.xland values(null,'1111',1);
exception
when no_data_found then
     dbms_output.put_line('没有找到数据');
when v_exception then
     dbms_output.put_line('没有找到数据1');
end;

这里提到了一个新的数据类型  exception
pragma exception_init(name,errcode)
把错误号为-1400的错误赋值给v_exception
在第二个when子句中不能使用sqlcode等系统变量

三:自定义异常并抛出
先看代码

declare 
v_exception EXCEPTION;
begin
RAISE   v_exception;
exception
when v_exception then
   dbms_output.put_line('捕获异常');
end;

先定义一个异常
然后抛出这个异常
然后捕获这个异常
如此而已

目录
相关文章
|
5月前
|
算法 数据挖掘 数据库
通过 SQL 快速使用 OceanBase 向量检索学习笔记
通过 SQL 快速使用 OceanBase 向量检索学习笔记
|
5月前
|
SQL 数据库
SQL 学习笔记 - 多表关系与多表查询
数据库多表关系包括一对多、多对多和一对一,常用外键关联。多表查询方式有隐式/显式内连接、外连接、子查询等,支持别名和条件筛选。子查询分为标量、列、行、表子查询,常用于复杂查询场景。
|
9月前
|
存储 SQL 数据库连接
C#程序调用Sql Server存储过程异常处理:调用存储过程后不返回、不抛异常的解决方案
本文分析了C#程序操作Sql Server数据库时偶发的不返回、不抛异常问题,并提出了解决思路。首先解析了一个执行存储过程的函数`ExecuteProcedure`,其功能是调用存储过程并返回影响行数。针对代码执行被阻塞但无异常的情况,文章总结了可能原因,如死锁、无限循环或网络问题等。随后提供了多种解决方案:1) 增加日志定位问题;2) 使用异步操作提升响应性;3) 设置超时机制避免阻塞;4) 利用线程池分离主线程;5) 通过信号量同步线程;6) 监控数据库连接状态确保可用性。这些方法可有效应对数据库操作中的潜在问题,保障程序稳定性。
712 11
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
203 2
|
SQL Oracle 关系型数据库
SQL与PL/SQL:数据库编程语言的比较
【8月更文挑战第31天】
528 1
|
SQL 数据库
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
1708 0
|
SQL DataWorks 数据可视化
DataWorks操作报错合集之使用sql查询报错:系统异常,是什么原因
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(1)——表中数据的整删改查
简简单单 My SQL 学习笔记(1)——表中数据的整删改查
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
简简单单 My SQL 学习笔记(3)——连接和嵌套查询