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はマルチクエリをサポートしません。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