`

Oracle 10g处理例外(即sql异常)学习一——预定义例外,即常见例外

阅读更多
Oracle提供了预定义例外、非预定义例外和自定义例外等三种例外类型,其中预定义例外用于常见的Oracle错误;非预定义例外则用于预定义例外所不能处理的错误;自定义例外用于处理与Oracle错误无关的其他情况
1、例外的格式
declare
v_name communitytype.name%type;
begin
select name into v_name
from communitytype
where community_type_id = 'ebook';
dbms_output.put_line(v_name);
--捕捉异常
exception
when too_many_rows then 
dbms_output.put_line('查询只能返回单行');
when no_data_found then
dbms_output.put_line('没有找到任何记录');
when others then
dbms_output.put_line('查询出现异常');
end;


2、处理预定义列外
预定义例外是指有pl/sql所提供的系统例外。当pl/sql应用程序违反了Oracle规则或者系统限制时,则会隐含的触发一个内部例外。pl/sql为开发人员提供了大概20多个例外,每个例外都对应一个Oracle系统错误。
1)常用预定义例外

access_into_null 对应于ORA-06530,没有初始化对象就直接给对象赋值

case_not_found 对应于ORA-06592,当在pl/sql块中编写case语句时,如果在when子句中没有包含必须的条件分支,并前没有包含else子句,就会隐含地厨房case_not_fount例外
declare
v_name communitytype.name%type;
begin
select name into v_name 
from communitytype t 
where t.community_type_id = 'ebook';
case
when v_name = '123' then
dbms_output.put_line('name为123');
end case;
exception
when case_not_found then
dbms_output.put_line('没有将所有情况考虑完全');
end;


    没有将所有情况考虑完全


collection_is_null 对应于ORA-06531,在给集合元素赋值前,必须初始化集合元素。如果没有初始化集合元素,则会隐含地触发collection_is_null
declare
--集合类型(索引表)
type ename_table_type is table of communitytype.name%type;
ename_table ename_table_type;
begin
select name into ename_table(1)
from communitytype
where community_type_id = 'ebook';
dbms_output.put_line(ename_table(1));
exception
when collection_is_null then
dbms_output.put_line('集合类型没有初始化');
end;


    集合类型没有初始化


cursor_already_open 对应于OR-06511,当重新打开已经打开的游标时,会触发该例外。如果用户已经使用open命令打开了现实游标,并执行游标for循环时,就会隐含地触犯该例外,因为游标for循环会隐含地打开游标。
declare
cursor emp_cursor is
select name from communitytype;
begin
open emp_cursor;
for emp_record in emp_cursor loop
dbms_output.put_line(emp_record.name);
end loop;
exception
when cursor_already_open then
dbms_output.put_line('游标已经打开');
end;


    游标已经打开


dup_val_on_index 对应于ORA-001,当在唯一索引所对应的列上插入重复值,就会隐含地触发该例外,比较常见的情况就是主键冲突,也就是插入重复的主键。

invalid_cursor 对应于ORA-01001,当试图在不合法的游标上执行操作时,就会隐含地触发该例外,例如,如果要从未打开的游标中提取数据,或者关闭未打开的游标时,就会触发该例外。
declare
cursor emp_cursor is
select name from communitytype;
emp_record emp_cursor%rowtype;
begin
fetch emp_cursor into emp_record;
close emp_cursor;
exception
when invalid_cursor then
dbms_output.put_line('关闭还没有打开的游标,抛出异常');
end;


    关闭还没有打开的游标,抛出异常


invalid_number 对应于ORA-01722,当内嵌的sql语句不能将有效的字符转换为数字时,会隐含地触发该例外。
declare
v_number int;
begin
select 1+'1OO' into v_number from dual;
exception
when invalid_number then
dbms_output.put_line('不能有效地将字符转换为数字');
end;


    不能有效地将字符转换为数字


no_data_found 对应于ORA-01403,当执行select into时未返回行,或者引用了索引表未初始化的元素时,会触发该例外

too_many_rows 对应于ORA-01422,当查询单行记录时,返回多行记录就会触发该例外。

zero_divide 对应于ORA-01476,如果用数字值除0时,会隐含触发该例外。

subscript_beyond_count 对应于ORA-06533,当使用嵌套表或变长数组varray元素时,下标超出范围时,则会隐含地触发该例外。
declare
type emp_array_type is varray(20) of varchar2(10);
emp_array emp_array_type;
begin
emp_array:=emp_array_type('郑田','胡杰');
--变长数组下标从1开始
dbms_output.put_line(emp_array(3));
exception
when subscript_beyond_count then
dbms_output.put_line('数组越界,超出下标');
end;


    数组越界,超出下标


subscript_outside_limit 对应于ORA-06532,当使用嵌套表和变长数组时,如果元素下表为负或者为0时,会触发该例外
declare
type emp_array_type is varray(20) of varchar2(10);
emp_array emp_array_type;
begin
emp_array:=emp_array_type('郑田','胡杰');
--变长数组下标从1开始
dbms_output.put_line(emp_array(0));
exception
when subscript_outside_limit then
dbms_output.put_line('数据表和变长数组下标不能为负');
end;


    数据表和变长数组下标不能为负


value_error 对应于ORA-06502,当在执行赋值操作时,如果变量长度不足以容纳实际数据时,则会隐含地触发该例外.
declare
v_ename varchar2(5);
begin
select name into v_ename
from communitytype
where community_type_id = 'ebook';
exception
when value_error then
dbms_output.put_line('变量尺寸不足');
end;


    变量尺寸不足



其他预定义例外
1、login_denied 对应于ora-01017错误,当用户链接oracle数据库时,如果提供了不正确的用户名或口令,则会触发该例外

2、not_logged_on 对应于ora-01012错误,如果应用程序没有链接到oracle数据库,那么在执行pl/sql块中访问数据库时,会触发该例外。

3、program_error 对应于ora-06501错误,表示存在pl/sql内部问题,用户此时可能要重新安装数据字典和pl/sql系统包

4、rowtype mismatch 对应于ora-06504错误,当执行赋值操作时,如果宿主游标变量和pl/sql游标变量的返回类型不兼容,会触发该例外。

5、self_is_null 对应于ora-30625错误,当使用对象类型时,如果在null实例上调用成员方法,会触发该实例。

6、storage_error 对应于ora-06500错误,当pl/sql块运行时,如果超出内存空间或者内存被损坏,会触发该例外。

7、sys_invalid_rowid 对应于ora-01410错误,当将字符串转变为rowid时,必须使用有效的字符串,如果使用的无效的字符串,会触发该例外。

8、timeout_on_resource 对应于ora-00051错误,如果oracle在等待资源时,出现超时错误,会触发该例外
分享到:
评论

相关推荐

    Oracle 8基础——对服务器编程

    Oracle 8的基础对服务器编程主要涉及的是Oracle的PL/SQL编程语言,这是一种强大的过程化语言,用于构建与Oracle数据库交互的应用程序。以下是对PL/SQL语言基础的详细说明: 1. **PL/SQL语言结构**: - **程序块**...

    韩顺平玩转oracle视频的文档

    - **处理预定义例外**:处理Oracle预先定义好的异常。 - **非预定义例外**:自定义异常的处理。 ### Oracle的视图 这部分介绍了Oracle中的视图概念及其使用方法。 通过以上内容,可以了解到Oracle数据库的强大功能...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    2. oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat 3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行...

    韩顺平oracle视频笔记

    ### 韩顺平Oracle视频笔记知识点概览 #### 1. Oracle 用户管理 - **概念**:在Oracle数据库中,用户是用来管理访问权限的基本单位。每个用户都可以有自己的模式(schema),其中包含各种对象如表、视图等。 - **创建...

    oracle实用教程-韩顺平

    - **安装过程**:安装Oracle时会自动生成两个预定义的账户——`sys`和`system`。`sys`用户是超级用户,具有最高的权限,包括创建数据库的能力;而`system`用户虽然权限也很高,但不包含创建数据库的权限。 #### 二...

    ORACLE数据库优化设计方案

    Oracle推荐了一种优化结构——OFA(Optimal Flexible Architecture),旨在简化数据库物理设计中的数据管理过程。通过OFA,可以高效自由地分布数据库中的逻辑数据对象。 **具体步骤包括:** 1. **分类逻辑对象**:...

    ASP.NET源码——[CMS程序]JumbotCms 3.2 bulid 090628 程序包.zip

    5. **数据绑定**:ASP.NET的数据绑定机制使得动态显示和操作数据库数据变得简单,可以方便地与各种数据源如SQL Server、Oracle等进行交互。 JumbotCms 3.2是基于ASP.NET构建的内容管理系统,其特点可能包括: 1. *...

    数据库基础042-东南大学远教培训视频

    东南大学作为一所知名学府,其教学资源通常严谨且全面,这门课程也不例外。 数据库的基础部分涵盖了以下几个关键知识点: 1. **数据库概念**:了解什么是数据库,它的功能和类型,如关系型数据库(如MySQL、Oracle...

    成为Java大牛.zip

    学习如何使用try-catch-finally语句块来捕获和处理异常,以及不同类型的异常类,如IOException、NullPointerException等,能帮助我们编写出更稳定的应用。 3. **集合框架**: Java集合框架包括List、Set、Map接口...

    delphiXe2 fire-monkey

    5. **丰富的组件库**:FireMonkey包含一系列预定义的UI组件,如按钮、列表视图、表格等,以及用于处理数据、网络和多媒体的组件。 **Delphi XE2的其他特性** 1. **集成的IDE**:Delphi XE2的集成开发环境提供了代码...

    免客户端连接PLSQL方法.docx

    本文将详细介绍一种无需安装完整Oracle客户端即可连接Oracle数据库的方法——通过配置PL/SQL Developer来实现免客户端连接。 #### 二、免客户端连接PL/SQL方法 **1. 准备工作** - **下载Instant Client文件** - ...

    footballSample管理系统

    《足球样本管理系统——Java与SQL数据库的深度融合》 在当今数字化时代,管理系统已经渗透到各行各业,其中体育领域的管理也不例外。本项目"footballSample管理系统"正是这样一款专为足球管理定制的系统,它采用...

    ums.zip_ums

    在Java Web开发中,Spring MVC框架常被用来构建这一层,它提供了强大的路由、依赖注入和异常处理能力。 为了实现数据持久化,ums可能使用了关系型数据库,如MySQL或Oracle。在Java中,JDBC(Java Database ...

    小型图书管理系统

    MySQL以其轻量级和高效的特点常用于中小型项目,SQL Server适合大型企业环境,而Oracle则以其强大的数据处理能力和企业级特性受到青睐。用户可以根据实际需求和硬件条件选择合适的数据库,只需在配置文件中进行简单...

    DatabaseNet4.zip

    它支持多种数据库管理系统(DBMS),如MySQL、Oracle、SQL Server、PostgreSQL等,涵盖了关系型数据库和非关系型数据库,满足了用户对多样化数据库环境的需求。通过提供统一的界面,用户可以方便地进行数据查询、表...

    图片管理系统(毕业设计)

    常见的关系型数据库如MySQL、SQL Server和Oracle都支持BLOB类型字段,用于存储大量的非结构化数据,如图片、音频或视频。在本系统中,图片的二进制数据会被存储在一个专门设计的表中,包含图片ID、用户ID、图片名称...

Global site tag (gtag.js) - Google Analytics