---
title: "使用 ODC 创建存储过程 | OceanBase 文档中心"
description: 使用 ODC 创建存储过程 OceanBase 开发者中心（OceanBase Developer Center，ODC）支持可视化方式创建存储过程。本文介绍如何用 ODC 创建存储过程。 概述 存储过程是一条或多条语句的集合，对数据库进行一系列复杂操作时，存储过程可以在数据库内将这类复杂操作封装成一个代码块，以便重…
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

# 使用 ODC 创建存储过程

更新时间：2023-07-19 13:03:06

OceanBase 开发者中心（OceanBase Developer Center，ODC）支持可视化方式创建存储过程。本文介绍如何用 ODC 创建存储过程。

## 概述

存储过程是一条或多条语句的集合，对数据库进行一系列复杂操作时，存储过程可以在数据库内将这类复杂操作封装成一个代码块，以便重复使用，从而减少数据库开发人员的工作量。

存储过程旨在完成特定功能的 SQL 语句集，经编译创建并保存在数据库中，用户可以通过指定存储过程名并指定所需参数来调用执行，利用存储过程可以加速 SQL 语句的执行。

新建存储过程，即由用户创建并能够完成某一特定功能的存储过程，存储过程可以包含参数和返回值。

### 存储过程与函数的区别

- 函数的返回值显示具体结果值，而存储过程的返回值仅指明执行是否成功。
 - 可以直接通过 `SELECT` 语句调用函数，而存储过程的调用需要使用 `CALL` 语句。

### 存储过程作用

- 提高应用程序的通用性和可移植性：新建存储过程完成后，可以在程序中被多次调用，无需重新编写该存储过程的 SQL 语句，且支持修改存储过程，对程序源代码无影响，从而提高程序的可移植性。
 - 提高 SQL 执行速度：存储过程编译完成，如果某一个操作包含大量的 SQL 代码或者分别被执行多次，则使用存储过程比直接使用单条 SQL 语句执行速度更快速。
 - 减轻服务器的负担：在进行数据库对象操作时，如果使用单条调用的方式，则网络上必须传输大量的 SQL 语句；如果使用存储过程，则可以直接发送过程的调用命令，从而降低网络负担。

![概述](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/333/%E6%96%B0%E5%BB%BA%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B-%E6%A6%82%E8%BF%B0.png)

如上图所示，创建存储过程包含以下 5 个步骤：

1. 输入存储过程名称。
 2. 添加参数。
 3. 确定新建存储过程信息。
 4. 编辑存储过程信息。
 5. 完成新建存储过程。

## 操作步骤

以在 ODC 中创建部门预算存储过程（proc_total）为例，存储过程 proc_total 中包含 budget_r 和 budget_s 两个 INT 类型的输入参数，计算两个参数之和。具体操作步骤如下：

### 步骤 1：指定存储过程名称

在 OceanBase 开发者中心（OceanBase Developer Center，ODC）单击连接名进入连接后，在左导航栏中单击 **存储过程** 标签可以查看存储过程列表。在存储过程列表的右上角，单击 **+** 创建存储过程，或是在顶部导航栏中单击 **新建** > **存储过程** 以创建所需的对象。

在 **新建存储过程** 中，输入存储过程名称。

![1](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/333/%E6%96%B0%E5%BB%BA%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B-%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A41.png)

### 步骤 2：添加参数

1. 参数即调用函数时传入的信息，需指定参数的 **名称** 、 **模式** 、 **类型** 和 **长度** 。
 2. 添加函数提供三种功能操作：

   | 功能项 | 说明 |
   | --- | --- |
   | 弹窗引导辅助菜单 | 通过弹窗引导辅助菜单，可添加、删除、上下移动参数。 |
   | 单击表序号 | - 单击表序号，选中整行，显示辅助菜单（删除、上/下移动）。     - 单击并选中表序号，可拖动整行参数以调整顺序。 |
   | 鼠标右键操作 | 右键单击鼠标选中整行，进行复制行 / 向下移动一行。 | |

   > **说明**
   >
   >  
   >
   > 复制行后，可选中某行并通过快捷键 Command + V / Ctrl + V 进行粘贴。

### 步骤 3：确定新建存储过程

单击 **确定** ，进入 SQL 创建确认页面。

### 步骤 4：编辑存储过程

![4](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/333/%E6%96%B0%E5%BB%BA%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B-%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A44.png)

在 SQL 创建确认页面 ，编辑存储过程语句。

同时，在编辑页面的工具栏中提供了以下功能键：

| 功能 | 说明 |
| --- | --- |
| 格式化 | 单击该按钮对选中的 SQL 语句或当前 SQL 窗口中的所有 SQL 语句进行统一的格式化（缩进、换行和高亮关键字等操作）。 |
| 查找/替换 | 在查找框内输入内容以对脚本进行检索，查找后可在替换框内输入内容以对查找内容进行替换。 |
| 撤销 | 将脚本回退到上一步操作执行的结果。 |
| 重做 | 执行 **撤销** 操作后，对脚本重新执行撤销前的操作。 |
| 大小写 | 提供 **全部大写** 、 **全部小写** 和 **首字母大写** 三种效果，为脚本中选中的语句转换为对应形式。 |
| 缩进 | 提供 **添加缩进** 和 **删除缩进** 两种效果，为脚本中选中的语句添加或删除包含的缩进。 |
| 注释 | 提供 **添加注释** 和 **删除注释** 两种效果，为脚本中选中的语句转换为注释或转换为 SQL 语句。 |
| IN 值转化 | 可以将如 A B 的格式转化为 ('A','B') 的格式。 |

用户可以在 SQL 创建确认页面编辑创建的存储过程语句。语法格式如下：

```sql
CREATE PROCEDURE proc_name (
  [proc_parameter[,...]])
BEGIN
proc_body:
　　Valid SQL routine statement
END [end_label]

```

参数说明：

| 参数 | 说明 |
| --- | --- |
| proc_name | 存储过程的名称，默认在当前数据库中创建。 如需在特定数据库中创建存储过程，需要在名称前加上数据库名称，即 db_name.sp_name。   **注意**    名称应当尽量避免选取与 MySQL 内置函数相同的名称，否则会发生错误。 |
| [proc_parameter[,…] ] | 存储过程的参数列表，包括 `[IN\|OUT\|INOUT] parameter_name parameter_type`。    其中，`parameter_name` 为参数名，`parameter_type` 为参数的类型（可以是任何有效的 MySQL 数据类型）。当有多个参数时，参数列表中彼此间用逗号分隔。存储过程可以无参数（此时存储过程的名称后仍需加上一对括号），也可以有 1 个或多个参数。   **注意**    参数名避免与数据表的列名相同，否则存储过程的 SQL 语句会将参数名看作列名，从而可能出错。 |
| proc_body | 存储过程的主体部分，包含在过程调用的时候必须执行的 SQL 语句。    此部分以 **BEGIN** 开始， **END** 结束。如存储过程体中只有一条 SQL 语句，则可以省略 BEGIN-END 标志。 |

### 步骤 5：完成新建存储过程

单击 **创建** ，完成新建存储过程后，可以如同调用系统内置函数一样，使用 `CALL` 语句调用用户自定义的存储过程。

![5.1](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/333/%E6%96%B0%E5%BB%BA%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B-%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A45.png)

> **说明**
>  在左侧导航栏中，右键鼠标单击存储过程列表中的存储过程名，通过弹出的管理操作列表（包括 **查看** 、 **新建** 、 **编辑** 、 **运行** 、 **下载** 、 **删除** 和 **刷新** 等），可快速管理和操作目标对象。

语法格式：

```sql
CALL proc_name ([proc_parameter [,...]]);

```

示例：

```sql
CALL proc_total (30000, 20000);

```

![5.2](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/333/%E6%96%B0%E5%BB%BA%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B-%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A45-2.png)

## 相关信息

- [使用 ODC 创建表](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357163)
 - [使用 ODC 创建视图](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357164)
 - [使用 ODC 创建函数](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357165)

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