`
bjtale
  • 浏览: 29610 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

PL/SQL异常处理

阅读更多

PL/SQL提供了良好的异常处理机制,当程序运行出现错误时就会触发异常。异常被触发时,程序执行即终止,在PL/SQL块中提供了异常处理的部分,从而可以捕获一个异常进行特殊处理。

严格意义上来讲,一个完整的PL/SQL块应该具有以下结构:

declare
--declare variables
begin
--execute & exception raised
exception
--handle exception
end;

 oracle数据库预先定义了一系列异常,以下是常见的一些:

    ACCESS_INTO_NULL(ORA-06530):引用对象类型变量的属性时,未对变量进行初始化;

    CASE_NOT_FOUND(ORA-06592):使用case-when结构时,未使用else子句,并且处理了不包含的case条件;

    COLLECTION_IS_NULL(ORA-06531):引用集合类型元素时,未对集合类型变量初始化;

    CURSOR_ALREADY_OPEN(ORA-06511):使用open命令打开已经处于打开状态的显式游标;

    DUL_VAL_ON_INDEX(ORA-00001):在唯一约束的列上插入重复的值时会触发;

    INVALID_NUMBER(ORA-01722):不能将字符转换为合理的数字时会触发;

    NO_DATA_FOUND(ORA-01403):select语句未返回行或引用未初始化的索引表元素;

    TOO_MANY_ROWS(ORA-01422):select into时,返回数据超过一行时即被触发;

    ZERO_DEVIDE(ORA-01476):除0异常;

 

    SUBSCRIPT_BEYOUND_COUNT(ORA-06533):使用数组类型是,下标超出元素范围;

    SUBSCRIPT_OUTSIDE_LIMIT(ORA-06532):使用嵌套表或Varry元素时,使用了负数作为下标;

    VALUE_ERROR(ORA-06502):赋值操作时,变量长度不足以容纳实际数据长度

    ROWTYPE_MISMATCH(ORA-06504):位游标变量赋值时,返回类型与游标定义类型不一致

除这些异常之外,开发者也可以进行自定义异常,并自定义处理规则。自定义异常的处理步骤如下:

1.在declare部分定义一个异常变量;

2.在begin处理中使用raise抛出一个异常;

3.在exception部分进行处理

其中,使用SQLCODE,SQLERRM这两个函数可以查看错误号和对应的错误消息;

 

RAISE_APPLICATION_ERROR(ERR_NUMBER,ERR_MSG,[TRUE|FALSE]):

    该语法用于自定义错误消息,err_number必须在-20000到-20999之间,err_msg指定错误消息,长度不能超过2048字节,第三个值用于控制错误堆栈信息的存放内容,默认为false,即触发时会替换之前所有的错误,指定为true时会将这次的错误存放在错误堆栈中。只能在过程、函数、触发器、包中使用,不能在匿名块或子程序中使用;

    使用以下代码建立存储过程,用于触发一个自定义错误消息的异常:

create or replace procedure comm_r(
       eno number,comm number)
       is
           v_comm emp.comm%type;
begin
           select comm into v_comm from emp where empno=eno;
           if v_comm is null then
              raise_application_error(-20001,'This guy has no comm!');
           end if;
exception
           when no_data_found then
                dbms_output.put_line('No such emp exists');
end;

 使用以下命令调用,得到结果如下:

SQL> exec comm_r(7788,100);
begin comm_r(7788,100); end;
ORA-20001: This guy has no comm!
ORA-06512: 在 "SCOTT.COMM_R", line 8
ORA-06512: 在 line 1

 

 

分享到:
评论

相关推荐

    oracle10g_pl/sql

    3. **PL/SQL异常处理** - **异常**:程序运行时的错误,如 divide_by_zero、no_data_found 等。 - **EXCEPTION块**:用于捕获和处理异常,可以定义自定义异常并使用RAISE语句抛出。 4. **PL/SQL与SQL的交互** - ...

    pl/sql最新中文手册

    3. **异常处理**:在PL/SQL中,异常处理是通过EXCEPTION关键字实现的,用于捕获并处理运行时错误。手册会详细解释如何定义和使用预定义及自定义异常。 4. **数据库操作**:PL/SQL与Oracle数据库紧密集成,可以执行...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    1. **编程能力**:PL/SQL允许编写包含控制结构(如循环、条件语句)和异常处理的程序块,这些块可以存储在数据库中并按需调用,提高了数据库应用的灵活性和复杂性。 2. **数据处理**:通过PL/SQL,用户可以直接对...

    有关于ORACLE PL/SQL异常处理的3个知识点!

    ORACLE PL/SQL异常处理.有关于异常处理的3个知识点!

    Oracle PL/SQL实战(待续)

    在Oracle数据库中,PL/SQL提供了丰富的控制结构,如循环、条件判断,以及异常处理机制,使得开发者能够编写复杂的业务逻辑。例如,`IF...THEN...ELSIF...ELSE`语句用于实现条件分支,`WHILE`和`FOR`循环则可以处理...

    Oracle PL/SQL编程及最佳实践

    PL/SQL 异常处理是 PL/SQL 中的一种机制,用于处理程序中的异常。PL/SQL 提供了多种异常处理机制,例如使用 EXCEPTION 语句、RAISE 语句等。 二十、常用预定义异常 PL/SQL 提供了多种预定义异常,例如 ZERO_DIVIDE...

    oracle pl/sql从入门到精通 配套源代码

    PL/SQL是Oracle数据库的内置编程语言,由块构成,包括声明部分、执行部分和异常处理部分。块可以是匿名块(即直接在SQL*Plus或其他工具中编写的一次性执行的代码),也可以是存储过程、函数、触发器、包等可重用的...

    ORACLE PL/SQL从入门到精通

    ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...

    PL/SQL 基本知识

    PL/SQL的结构通常包括声明部分、执行部分和异常处理部分。声明部分用于定义变量、常量和游标;执行部分是程序的主要逻辑,包含SQL语句和PL/SQL语句;异常处理部分则用于捕获和处理运行时可能出现的错误。 在实际...

    Oracle PL/SQL程序设计(第5版)(上下册)

    - **块结构**:PL/SQL程序通常被组织成块,每个块由声明部分、执行部分和异常处理部分组成。 - **子程序**:包括存储过程和函数。这些子程序可以被其他PL/SQL代码调用,实现代码复用和模块化。 - **包**:包是一种...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    5. **异常处理**:PL/SQL提供了异常处理机制,通过BEGIN...EXCEPTION块来捕获和处理运行时错误,如NO_DATA_FOUND、TOO_MANY_ROWS和OTHERS。 6. **包(PACKAGE)**:包是将相关的常量、变量、过程和函数组合在一起的...

    PL/SQL下载

    PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制结构和异常处理机制,使得开发者能够编写复杂的数据库操作程序。 **PL/SQL的特点** 1. **集成性**:PL/SQL与Oracle数据库紧密...

    PL/Sql设计经典

    六、PL/SQL异常处理 异常处理是PL/SQL的一个重要特性,允许程序优雅地处理运行时错误。通过使用BEGIN...EXCEPTION...END结构,可以捕获并处理不同类型的异常,从而增强程序的健壮性。 七、PL/SQL与Oracle数据库的...

    PL/SQL入门到精通书的源代码

    6. **异常处理**:PL/SQL提供了一个强大的异常处理机制,允许你定义和捕获运行时错误,从而编写健壮的代码。 7. **游标 FOR 循环**:这是一种简化版的游标使用,可以方便地遍历查询结果集,无需显式打开、提取和...

    PL/SQL编程基础知识

    - **异常处理部分**:用于处理程序执行过程中可能出现的错误。 PL/SQL块的基本结构如下: ```sql DECLARE -- 声明部分 BEGIN -- 执行部分 EXCEPTION -- 异常处理部分 END; ``` **2.2 PL/SQL块分类** 根据其...

    pl/sql语法详解

    六、PL/SQL异常处理 异常处理使用BEGIN...EXCEPTION结构,可以捕获并处理运行时错误。预定义异常如NO_DATA_FOUND(未找到数据)和TOO_MANY_ROWS(数据过多)是常见的异常情况。 七、PL/SQL动态SQL 通过EXECUTE ...

    PL/SQL doc 文件

    * 异常处理部分(Exception section):是可选的,在这一部分中处理异常或错误。 PL/SQL 块语法: [DECLARE] --- declaration statements BEGIN --- executable statements [EXCEPTION] --- exception statements ...

    PL/SQL安装包

    1. **结构化**:PL/SQL支持流程控制语句(如IF-THEN-ELSE,CASE,WHILE,FOR循环)和异常处理,使得开发者能够编写复杂的逻辑代码。 2. **集成性**:PL/SQL直接嵌入到Oracle数据库中,可以创建存储过程、函数、...

    Oracle Database 12c PL/SQL开发指南 实例源代码

    1. **PL/SQL基础**:PL/SQL的基础语法,如变量声明、数据类型、流程控制语句(如IF-THEN-ELSIF,FOR循环,WHILE循环)、异常处理(BEGIN-EXCEPTION-END结构)等。 2. **函数与过程**:如何定义和调用用户自定义的...

    Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发

    1. **PL/SQL基础**:涵盖PL/SQL的基本语法,包括变量声明、常量定义、条件语句(IF-THEN-ELSIF-ELSE)、循环结构(WHILE, FOR)、异常处理(BEGIN-EXCEPTION-END)以及子程序(PROCEDURE和FUNCTION)的创建与调用。...

Global site tag (gtag.js) - Google Analytics