首批通过分布式安全可靠测评,为关键业务系统打造
CREATE_RULE
更新时间:2026-05-28 16:28:18
CREATE_RULE 过程用于创建自定义改写规则。
语法
PROCEDURE CREATE_RULE (
rule_name VARCHAR(256),
rule_owner_name VARCHAR(128),
pattern LONGTEXT,
replacement LONGTEXT,
enabled VARCHAR(64) DEFAULT 'YES'
);
参数说明
| 参数 | 描述 |
|---|---|
| rule_name | 规则名称。 |
| rule_owner_name | 数据库名,仅 MySQL 模式需要指定。 |
| pattern | 规则匹配的语句的模板。 |
| replacement | 指示如何改写与 pattern 匹配的语句的模板。 |
| enabled | 规则是否生效。 |
使用说明
改写绑定规则限制如下:
- 支持的 SQL 语句类型为:
SELECT、INSERT、REPLACE、UPDATE、DELETE、MERGE和SET。 - 定义的规则模板中“?”跟“:{name}”不能混用。
pattern定义中当使用“:{name}”来充当参数标记时,name不能重复出现。pattern跟replacement不能定义为空。pattern跟replacement不支持 Multi Query。rule_name需要保证租户级唯一。- 规则模板中
pattern跟replacement的参数标记个数必须相同。 - 规则模板中
pattern跟replacement的参数表示方式必须相同(都用“?”表示,或者都用“:{name}”表示)。
示例
obclient> CALL DBMS_UDR.CREATE_RULE ('rule1','test','select ? from dual','select ? + 1 from dual');
Query OK, 0 rows affected
obclient> SELECT 1 FROM DUAL;
+-------+
| ? + 1 |
+-------+
| 2 |
+-------+
1 row in set
obclient> SELECT DB_NAME, RULE_NAME, PATTERN, REPLACEMENT, NORMALIZED_PATTERN, STATUS, PATTERN_DIGEST FROM oceanbase.DBA_OB_USER_DEFINED_RULES;
+---------+-----------+--------------------+------------------------+--------------------+--------+---------------------+
| DB_NAME | RULE_NAME | PATTERN | REPLACEMENT | NORMALIZED_PATTERN | STATUS | PATTERN_DIGEST |
+---------+-----------+--------------------+------------------------+--------------------+--------+---------------------+
| test | rule1 | select ? from dual | select ? + 1 from dual | select ? from dual | ENABLE | 2647993221679348756 |
+---------+-----------+--------------------+------------------------+--------------------+--------+---------------------+
1 row in set