---
title: "PL 块 | OceanBase 文档中心"
description: PL 块 PL 程序由三个块组成，即声明部分（ DECLARE ）、执行部分（ BEGIN ）和异常处理部分（ EXCEPTION ）。 三个部分的作用如下： 声明部分：在此声明 PL 用到的变量、类型、游标以及局部的存储过程和函数。 执行部分：显示执行过程及 SQL 语句，是程序的主要部分。 异常处理部分：显示错误…
---
切换语言

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

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

# PL 块

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

PL 程序由三个块组成，即声明部分（`DECLARE`）、执行部分（`BEGIN`）和异常处理部分（`EXCEPTION`）。

三个部分的作用如下：

- 声明部分：在此声明 PL 用到的变量、类型、游标以及局部的存储过程和函数。
 - 执行部分：显示执行过程及 SQL 语句，是程序的主要部分。
 - 异常处理部分：显示错误处理。

PL 块的语法结构如下：

```javascript
DECLARE  
    /* 声明部分: 在此声明 PL 用到的变量、类型、游标以及局部的存储过程和函数 */
BEGIN
    /*  执行部分:  过程及 SQL 语句，即程序的主要部分  */
EXCEPTION
   /* 异常处理部分: 错误处理  */
END;

```

> **注意**
>
>  
>
> 执行部分是 PL 必须包含的内容。

PL 块可以分为以下三类：

- 匿名块：动态构造，只能执行一次。
 - 程序：存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用。
 - 触发器：当数据库发生操作时，会触发一些事件，从而自动执行相应的程序。

示例：一个最简单的匿名块，向屏幕打印"Hello World"。

```javascript
obclient> DECLARE  
        V_Str varchar(20) := 'World';
    BEGIN
        DBMS_OUTPUT.PUT_LINE('Hello '||V_Str);
    END;
    /
Query OK, 0 rows affected

Hello World

```

PL 块的默认分隔符为“/”，用户也可以使用 delimiter 命令自定义分隔符，以使整个定义能够作为单个语句传递给服务器 。分隔符可以由单个字符或多个字符组成，应该避免使用反斜杠（\）字符，它一般会被用作转义字符。示例如下：

```sql
DELIMITER $$

DELIMITER //

```

> **说明**
>
>  
>
> - 使用 OceanBase 开发者中心 ODC 白屏环境进行数据库开发时，需要自定义分隔符，并在调用 PL 程序前使用 `DELIMITER ;` 语句恢复为 `;`。
>  - 如果 PL 块内部定义中不包含由 `;` 分隔的语句，则不需要使用分隔符。

 上一篇 下一篇 ![有帮助](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) 咨询热线
