一、异常
(1) 程序错误
- 编译时
- 运行时
(2)异常
- 处理运行时错误
.PL/SQL是如何处理异常的?
- 错误引发异常
- 每当引发异常时,都将控制权传递给异常处理程序
- 异常处理程序处理异常
.异常中涉及的步骤
- 声明异常
- 引发异常
- 处理异常
.异常的类型
- 预定义的异常 --由Oracle服务器维护异常
- 非预定义的异常 又称'用户定义异常'
1、预定义异常
由Oracle为常见错误预定义
在DBMS_Standard程序包中提供了这些定义
不需要显式声明
declare
empJob emp.job%type;
begin
select job into empjob from emp where empno=0000;
DBMS_output.put_line('Employee job is '||emjob);
Exception
when No_data_found then
DBMS_output.put_line('错误了,查询没有返回行');
when too_many_rows then
DBMS_output.put_line('错误了,查询返回了多条数据');
when zero_divide then
DBMS_output.put_line('错误了,除数不能为零');
when others then --一定是最后一个处理的代码
DBMS_output.put_line('错误了,未知的错误信息');
end;
2、非预定义异常
无法预知的错误,如网络不通、服务没有启动、或其他错误,这样的异常需要用户要定义
declare
PK_conflict Exception; --用户定义异常
iCount int:=0;
begin
select count(*) into iCount from emp where empno='7369'
if iCount>0 then
raise Dup_Value; --引发异常
end if;
Exception
when PK_conflict then --处理异常
DBMS_output.put_line('表中已经有这条记录了');
end;
/
以上代码的问题是,只有条件满足 才会引发异常,否则永远都不会执行此句.
并且当有多个语句都有可能会引发此异常时,代码就过于冗余.并且都要显示
的引发异常,能不能让系统帮我们维护自定义异常了,当有异常引发时 自动
通知Oracle服务器处理异常
3、pragma指令
declare
PK_conflict Exception; --用户定义异常
pragma Exception_init(PK_conflict -1); --编译指令 可以把异常捆绑到Oracle 并覆盖预定义的异常
iCount int:=0; 这里的-1 代表主键冲突
begin
insert into emp(empno,ename) values('7369','FeiYang');
Exception
when PK_conflict then --处理异常
DBMS_output.put_line('表中已经有这条记录了,主键冲突');
end;
为了给用户友好的错误提示.用此函数可以定义友好的提示。
DBMS_output.put_line()函数只有sqlPlus 客户端支持.
Raise_Application_Error
.用于创建用户定义的错误消息的过程
.可以再执行部分和异常部分使用
.必须介于 -20000 和 -20999之间
.可以存储2M的错误信息
declare
PK_conflict Exception; --用户定义异常
pragma Exception_init(PK_conflict -1); --编译指令
iCount int:=0;
begin
insert into emp(empno,ename) values('7369','FeiYang');
Exception
when PK_conflict then --处理异常
Raise_Application_Error(-20001,'表中已经有这条记录了'); --注意参数的前后顺序
end;
常见系统异常参考表:
1命名的系统异常 产生原因
2 access_into_null 未定义对象
3 CASE_NOT_FOUND CASE 中若未包含相应的 WHEN ,并且没有设置 ELSE 时
4 COLLECTION_IS_NULL 集合元素未初始化
5 CURSER_ALREADY_OPEN 游标已经打开
6 DUP_VAL_ON_INDEX 唯一索引对应的列上有重复的值
7 INVALID_CURSOR 在不合法的游标上进行操作
8 INVALID_NUMBER 内嵌的 SQL 语句不能将字符转换为数字
9 NO_DATA_FOUND 使用 select into 未返回行,或应用索引表未初始化的元素时
10 TOO_MANY_ROWS 执行 select into 时,结果集超过一行
11 ZERO_DIVIDE 除数为 0
12 SUBSCRIPT_BEYOND_COUNT 元素下标超过嵌套表或 VARRAY 的最大值
13 SUBSCRIPT_OUTSIDE_LIMIT 使用嵌套表或 VARRAY 时,将下标指定为负数
14 VALUE_ERROR 赋值时,变量长度不足以容纳实际数据
15 LOGIN_DENIED 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码
16 NOT_LOGGED_ON PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据
17 PROGRAM_ERROR PL/SQL 内部问题,可能需要重装数据字典& pl./SQL 系统包
18 ROWTYPE_MISMATCH 宿主游标变量与 PL/SQL 游标变量的返回类型不兼容
19 SELF_IS_NULL 使用对象类型时,在 null 对象上调用对象方法
20 STORAGE_ERROR 运行 PL/SQL 时,超出内存空间
21 SYS_INVALID_ID 无效的 ROWID 字符串
22 TIMEOUT_ON_RESOURCE Oracle 在等待资源时超时
分享到:
相关推荐
PLSQL 异常处理及嵌套块 PLSQL 中的异常处理是一个非常重要的概念,它可以帮助开发者更好地处理代码中的错误,从而提高程序的稳定性和可靠性。本文将对 PLSQL 异常处理进行详细的介绍,包括什么是异常、异常处理...
5. PLSQL异常处理: PLSQL的异常处理机制允许开发者预定义或自定义异常,并通过BEGIN...EXCEPTION...END结构来捕获和处理异常。这有助于提高程序的健壮性,确保在出现错误时能够优雅地处理。 6. PLSQL的游标: 游标...
5. **PLSQL异常处理** - **异常处理结构**:使用BEGIN...EXCEPTION部分来捕获和处理运行时错误。 - **预定义异常**:例如NO_DATA_FOUND、TOO_MANY_ROWS等,针对特定的数据库操作错误。 - **自定义异常**:创建...
六、PLSQL异常处理 异常处理是PLSQL中非常重要的一部分,可以捕获和处理运行时错误。如使用EXCEPTION关键字定义异常处理块,捕获诸如NO_DATA_FOUND、TOO_MANY_ROWS等预定义异常,或者自定义异常。 七、PLSQL性能...
plsql异常错误处理PPT教案.pptx
4. **PLSQL异常处理**: - 使用BEGIN...EXCEPTION...END结构来捕获和处理异常。 - 自定义异常可以使用RAISE语句抛出。 5. **存储过程**: - 存储过程是预编译的PLSQL代码块,存储在数据库中,可被多次调用。 - ...
福建省电力公司oracle培训教材--PLSQL之游标与异常处理
这个压缩包“plsql.rar”包含了多个文档,详细讲述了PLSQL的相关知识点,包括其书写规则、语法、存储过程以及异常处理。 1. **PLSQL的书写及语法**: PLSQL的基本结构包括声明部分(DECLARE)、执行部分(BEGIN......
PLSQL的主要组成部分包括声明部分、执行部分和异常处理部分。在声明部分,你可以定义变量、常量、游标、过程和函数等;执行部分则包含SQL语句和PLSQL控制结构,如循环、条件判断等;异常处理部分帮助我们捕获和处理...
6. **异常处理**:PLSQL的异常处理机制允许在程序中捕获并处理运行时错误。通过EXCEPTION关键字,可以定义特定的异常处理块,以优雅地处理错误,而不是让程序意外终止。 7. **游标**:游标用于在结果集中逐行处理...
PLSQL由三个主要部分组成:声明部分、执行部分和异常处理部分。声明部分用于定义变量、常量、游标和过程;执行部分是实际执行的代码,包括SQL语句和PLSQL语句;异常处理部分则用于捕获和处理运行时可能出现的错误。 ...
5. **异常处理**:学习PLSQL中的异常处理机制,如TRY-CATCH块,用于捕获和处理运行时错误,提高程序的健壮性。 6. **PLSQL Developer IDE的使用**:熟悉IDE的各项功能,如代码编辑器、调试器、对象浏览器、数据查看...
命名程序块可以出现在其他 PLSQL 程序块的声明部分,这方面比较明显的是子程序,子程序可以在执行部分引用,也可以在异常处理部分引用。 PLSQL 程序块可背独立编译并存储在数据库中,任何与数据库相连接的应用程序...
PLSQL由三部分组成:声明部分(DECLARE)、执行部分(BEGIN...END)和异常处理部分(EXCEPTION)。在声明部分,我们定义变量、游标、常量和子程序。执行部分是PLSQL的主要工作区,用于编写业务逻辑。异常处理部分则...
PLSQL还提供了异常处理机制,通过EXCEPTION关键字定义异常处理块,可以捕获并处理如 division_by_zero(除以零)、too_many_rows(多行结果)或no_data_found(无数据找到)等常见数据库异常。 学习Oracle PLSQL的...
PLSQL程序由块组成,包括声明部分、执行部分和异常处理部分。声明部分用于定义变量、常量、游标和子程序;执行部分包含SQL语句和PLSQL语句,用于执行实际操作;异常处理部分则用于捕获和处理运行时错误。 二、变量...
PLSQL的主要组成部分包括声明部分(Declarations)、执行部分(Executable Section)和异常处理部分(Exception Handling)。在声明部分,你可以定义变量、游标、常量、记录类型等;执行部分则是编写SQL语句和过程化...
- **异常处理**:PLSQL提供了强大的异常处理机制,允许开发者定义并处理预定义或自定义的异常。 - **可重用的代码组件**:如包(`PACKAGES`)、函数(`FUNCTIONS`)、过程(`PROCEDURES`)、触发器(`TRIGGERS`)等...
PLSQL由三部分组成:声明部分(DECLARATION)、执行部分(EXECUTION)和异常处理部分(EXCEPTION HANDLING)。声明部分用于定义变量、常量、游标、记录类型等;执行部分包含SQL语句和PLSQL控制结构;异常处理部分则...
1. **PLSQL基本语法**:PLSQL由声明部分、执行部分和异常处理部分组成。声明部分定义变量、常量、游标等;执行部分包含SQL语句和PLSQL语句;异常处理部分用于捕获和处理运行时错误。 2. **PLSQL块**:包括匿名块、...