---
title: "新建函数 - 开发者中心 ODC V4.3.2 | OceanBase 文档中心"
description: 新建函数 OceanBase 开发者中心（OceanBase Developer Center，ODC）支持可视化方式创建函数。本文介绍如何使用 ODC 创建函数。 概述 函数是在数据库内定义的子程序，可以从内置 SQL 语句中调用函数。如果自带的函数不能满足业务需求，则可以通过 ODC 新建函数，添加自定义函数，以…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*lqS5SYzz_YEAAAAAAAAAAAAADiGDAQ/original) 开发者中心 ODCV 4.3.2

# 新建函数

更新时间：2026-04-13 15:31:21

[编辑](https://github.com/oceanbase/odc-doc/edit/V4.3.2/zh-CN/500.sql-development/700.database-objects/300.web-odc-function-objects/200.web-odc-create-a-function.md)  

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

## 概述

函数是在数据库内定义的子程序，可以从内置 SQL 语句中调用函数。如果自带的函数不能满足业务需求，则可以通过 ODC 新建函数，添加自定义函数，以实现某些功能运算和完成各种特定操作，且自定义函数可以减少重复编码，提高程序可读性。

函数是一种与存储过程十分相似的过程式数据库对象。与存储过程一样，都是由 SQL 语句和过程式语句组成的代码片段，并且可以被应用程序和其他 SQL 语句调用。

自定义函数与存储过程的区别：

- 函数有且仅有一个返回，适合做处理数据后返回一个结果；存储过程可有 0 个或多个返回，适合做批量插入、批量更新。
 - 可以直接通过 `SELECT` 语句调用函数，而存储过程的调用需要使用 `CALL` 语句。

![1](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/420/900.database-objects/3.web-odc-function-objects/1.png)

如上图所示，创建函数包含以下 6 个步骤：

1. 输入函数名称。
 2. 选择函数返回值的数据类型。
 3. 添加参数。
 4. 确定新建函数信息。
 5. 编辑函数信息。
 6. 完成新建函数。

本文档以在 ODC 中创建员工函数 function_emp 为例，函数 function_emp 中包含 id INT 类型的参数，根据 id 获取员工姓名。

#### 说明

文中所使用的均为示例数据，您可根据实际情况对数据进行替换。

## 操作步骤

### 步骤一：输入函数名称

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

![1](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/333/%E6%96%B0%E5%BB%BA%E5%87%BD%E6%95%B0-%E6%AD%A5%E9%AA%A41.png)

### 步骤二：选择函数返回值的数据类型

具体数据类型，请参考 [OceanBase 数据库的参考指南](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000643285)。

### 步骤三：添加参数

1. 参数即调用函数时传入的信息，需指定参数信息：

      - Oracle 模式：需指定参数的 **名称** 、 **模式** 、 **类型** 和 **默认值** **。**
      - MySQL 模式： 需指定参数的 **名称** 、 **类型** 和 **长度** 。
 2. 添加函数提供三种功能操作：

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

   #### 说明

   复制行后，可选中某行并通过快捷键 Command + V / Ctrl + V 进行粘贴。
 3. **参数** 中需指定的 **模式** 指参数类型。

   MySQL 模式下不支持设定参数模式，Oracle 模式下支持三种参数模式 **IN** （输入）、 **OUT** （输出）、 **INOUT** （输入输出）：

   | **参数** | **类型** |
   | --- | --- |
   | IN | 输入参数，调用函数时将参数的值传入函数供执行函数时使用。 |
   | OUT | 输出参数，调用函数时，函数会忽略输出参数本身的值并传入一个空值，在函数体中可以修改输出参数并将修改结果返回给输出参数所代表的实参。 |
   | INOUT | 输入输出参数，即同时具备输入参数和输出参数的功能。 |

   #### 说明

   Oracle 模式下函数和存储过程均包含 IN/OUT/INOUT 参数；MySQL 模式下只包含 IN 参数，而存储过程包含 IN/OUT/INOUT 参数。

### 步骤四：确定新建函数

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

### 步骤五：编辑函数信息

![5](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/340/%E6%96%B0%E5%BB%BA%E5%87%BD%E6%95%B0-5.png)

在 SQL 创建确认页面，编辑函数语句。

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

```sql
CREATE FUNCTION function_name ([var_name var_type[,...]])
RETURNS return_type
 delarification_block
BEGIN
    function_body
EXCEPTION
    exception_handler
END;

```

参数说明：

| 参数 | 说明 |
| --- | --- |
| function_name | 指定自定义函数的名称。   #### 注意    自定义函数不能与存储过程具有相同的名称。 |
| var_name var_type | 用于指定自定义函数的参数。 该参数只有名称和类型，不能指定关键字 IN、OUT 和 INOUT。 |
| RETURNS return_type | 用于声明自定义函数返回值的数据类型。其中，`return_type` 用于指定返回值的数据类型。   #### 注意    在 RETURN VALUE 语句中包含 SELECT 语句时，SELECT 语句的返回结果只能是一行且只能有一列值。 |
| function_body | 自定义函数的主体部分，亦称函数体。 函数体必须包含一个 `RETURN` 语句。 当函数体为复合结构时，需要使用 BEGIN...END 语句。 |

示例：

```sql
CREATE FUNCTION `function_emp` ( `id` int(45)) RETURNS VARCHAR(300)

-- 函数体开始
BEGIN

-- 申明变量
DECLARE
  a VARCHAR(300);

-- 变量赋值
SELECT
  name INTO a
FROM
  employee
WHERE
  emp_no = id;

-- 返回值
RETURN a;

-- 函数体结束
END

```

### 步骤六：完成新建函数

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

![2](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/420/900.database-objects/3.web-odc-function-objects/2.png)

#### 说明

在左侧导航栏中，右键鼠标单击函数列表中的函数名，通过弹出的管理操作列表（包括 **查看**、 **编辑**、**运行**、 **导出**、**下载**、**删除** 和 **刷新**），可快速管理和操作目标对象。更多详情请参见 [管理函数](https://www.oceanbase.com/docs/common-odc-1000000001418164) 和 [常用功能简介](https://www.oceanbase.com/docs/common-odc-1000000001418012)

语法格式：

```sql
SELECT function_name ([function_parameter [,...]])

```

示例：

```sql
SELECT function_emp(2);

```

- MySQL 模式

  ![6.2](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/340/%E6%96%B0%E5%BB%BA%E5%87%BD%E6%95%B0-6.2.png)
 - Oracle 模式

  #### 注意

  Oracle 模式下，如果包含 OUT 参数，则需通过 `CALL` 方式调用；函数列表中如果出现黄色图标，表示目前有错误或者警告。

  ![6.3](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/340/%E6%96%B0%E5%BB%BA%E5%87%BD%E6%95%B0-6.3.png)

## 相关信息

- [新建表](https://www.oceanbase.com/docs/common-odc-1000000001418161)
 - [新建视图](https://www.oceanbase.com/docs/common-odc-1000000001418159)
 - [新建存储过程](https://www.oceanbase.com/docs/common-odc-1000000001418175)
 - [新建序列](https://www.oceanbase.com/docs/common-odc-1000000001418169)
 - [新建程序包](https://www.oceanbase.com/docs/common-odc-1000000001418171)
 - [新建触发器](https://www.oceanbase.com/docs/common-odc-1000000001418152)
 - [新建类型](https://www.oceanbase.com/docs/common-odc-1000000001418177)
 - [新建同义词](https://www.oceanbase.com/docs/common-odc-1000000001418155)

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