---
title: "DBMS_UDR 概述 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: DBMS_UDR 概述 DBMS_UDR 系统包提供了改写绑定功能，可以在 SQL 开始执行之前根据匹配规则改写数据库接收到的 SQL 语句。目前支持对 SELECT 、 INSERT 、 REPLACE 、 UPDATE 、 DELETE 、 MERGE 、 SET 语句类型进行改写。改写绑定规则可以通过视图 DB…
---
切换语言

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

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

# DBMS_UDR 概述

更新时间：2026-06-07 08:15:17

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/600.pl-reference/200.pl-mysql/1000.pl-system-package-mysql/17800.dbms-udr-mysql/100.dbms-udr-overview-mysql.md)  

`DBMS_UDR` 系统包提供了改写绑定功能，可以在 SQL 开始执行之前根据匹配规则改写数据库接收到的 SQL 语句。目前支持对 `SELECT`、`INSERT`、`REPLACE`、`UPDATE`、`DELETE`、`MERGE`、`SET` 语句类型进行改写。改写绑定规则可以通过视图 `DBA_OB_USER_DEFINED_RULES` 进行查询。

租户级配置项 `enable_user_defined_rewrite_rules` 用于控制是否开启改写绑定功能，默认关闭。如果改写绑定功能已开启，它会根据用户自定义的改写规则来检查是否对服务器收到的每个 SQL 语句进行改写。

```sql
ALTER SYSTEM SET enable_user_defined_rewrite_rules = 'True';
ALTER SYSTEM SET enable_user_defined_rewrite_rules = 'False';

```

## 改写绑定规则及匹配原理

改写绑定规则及匹配原理如下：

- 使用跟 Prepared Statements 相同的语法来定义改写规则。
 - 在改写规则模板中使用“?”或者“:{name}”充当匹配常量参数的标记。
 - 常量参数标记不能用于 SQL 关键字、标识符、函数等。
 - 对除了用“?”或者“:{name}”标记的参数之外的常量值，进行等值匹配。
 - 同时存在多个可匹配规则时，随机匹配第一个匹配上的规则。
 - 对创建规则时指定的数据库名称（Oracle 模式下为当前 User）进行严格匹配。

如下示例中，在改写规则模板中使用“:{name}”充当匹配常量参数的标记。

```sql
CALL DBMS_UDR.CREATE_RULE('rule1',
                          'test',
                          'select :A + 1 from dual',
                          'select :A + 10, 20 from dual');

```

如下示例中，在改写规则模板中使用“?”充当匹配常量参数的标记。

```sql
CALL DBMS_UDR.CREATE_RULE('rule1',
                          'test',
                          'select ? + 1 from dual',
                          'select ? + 10, 20 from dual');

```

下表展示了 `SELECT` 语句示例与上述改写规则是否匹配。

| **SQL** | **是否能命中规则** |
| --- | --- |
| select 1 + 1 from dual | 是 |
| select ? + 1 from dual | 是 |
| select 1 + 2 from dual | 否 |
| select 1 + ? from dual | 否 |

## 权限说明

通过租户级配置项 `enable_user_defined_rewrite_rules` 控制该租户是否开启改写绑定功能，创建规则时会指定 Database 来控制权限。

## DBMS_UDR 子程序概览

下表列出了 OceanBase 数据库当前版本所支持的 `DBMS_UDR` 子程序和简要描述。

| **子程序** | **描述** |
| --- | --- |
| [CREATE_RULE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686473) | 创建一条自定义改写规则。 |
| [DISABLE_RULE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686472) | 关闭一条自定义改写规则。 |
| [ENABLE_RULE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686474) | 开启一条自定义改写规则。 |
| [REMOVE_RULE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686471) | 删除一条自定义改写规则。 |

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