---
title: 编组
description: 异常处理的流程 异常错误可以出现在声明部分、执行部分以及异常处理部分，在不同部分引发的异常错误处理流程会有不同。 在执行部分引发的异常 当一个异常错误在执行部分引发时，分为以下两种情况进行错误处理： 情况一：如果当前 PL 块对该异常错误设置了处理，则执行该处理方式并成功完成块的执行，然后将控制转给外层块。 情况二：…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.3 企业版 LTS

# 异常处理的流程

更新时间：2023-11-06 10:12:14

异常错误可以出现在声明部分、执行部分以及异常处理部分，在不同部分引发的异常错误处理流程会有不同。

## 在执行部分引发的异常

当一个异常错误在执行部分引发时，分为以下两种情况进行错误处理：

- 情况一：如果当前 PL 块对该异常错误设置了处理，则执行该处理方式并成功完成块的执行，然后将控制转给外层块。
 - 情况二：如果当前 PL 块没有在异常处理部分捕获该异常，则说明是在上层块的执行中引发该异常。然后重复情况一的执行步骤。

示例如下：

```javascript
obclient> BEGIN
         DECLARE
             v_sal   employees.salary%TYPE;
         BEGIN
             SELECT salary INTO v_sal FROM employees
             WHERE empno=100;
         EXCEPTION
             WHEN OTHERS THEN
             DBMS_OUTPUT.PUT_LINE(SQLCODE||'-INNER');
         END;
     EXCEPTION
         WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE(SQLCODE||'-OUTER');
     END;
     /
Query OK, 0 rows affected

-4026-INNER

```

当删除了内层块的异常处理之后， 异常被外层块捕获。示例如下：

```javascript
obclient> BEGIN
         DECLARE
             v_sal   employees.salary%TYPE;
         BEGIN
             SELECT salary INTO v_sal FROM employees
             WHERE empno=100;
         END;
     EXCEPTION
         WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE(SQLCODE||'-OUTER');
     END;
     /
Query OK, 0 rows affected

-4026-OUTER

```

## 在声明部分引发的异常

在声明部分引起异常只能被外层块捕获到，而无法被当前块的异常处理捕获。

```javascript
obclient> BEGIN
         DECLARE
             abc number(3):='a';
         BEGIN
             null;
         EXCEPTION
             WHEN OTHERS THEN
             DBMS_OUTPUT.PUT_LINE(SQLCODE||'-INNER');
         END;
     EXCEPTION
         WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE(SQLCODE||'-OUTER');
     END;
     /
Query OK, 0 rows affected

-5114-OUTER

```

## 对异常进行处理

在一般的应用处理中，建议程序人员要对异常进行捕捉和处理。如果异常得不到妥善处理，程序运行出错时就会被终止，并且无法为后续的错误排查提供足够的诊断信息。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
