DBMS_UDRシステムパッケージは、書き換えバインディング機能を提供しており、SQLの実行開始前にマッチングルールに基づいてデータベースが受信したSQL文を書き換えることができます。現在、SELECT、INSERT、REPLACE、UPDATE、DELETE、MERGE、SETの各ステートメントタイプに対する書き換えをサポートしています。書き換えバインディングルールは、ビューDBA_OB_USER_DEFINED_RULESから照会できます。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
テナントレベルの構成パラメータenable_user_defined_rewrite_rulesは、書き換えバインディング機能を有効にするかどうかを制御します。デフォルトでは無効です。書き換えバインディング機能が有効になっている場合、ユーザー定義の書き換えルールに基づいて、サーバーが受信した各SQL文を書き換えるかどうかをチェックします。
ALTER SYSTEM SET enable_user_defined_rewrite_rules = 'True';
ALTER SYSTEM SET enable_user_defined_rewrite_rules = 'False';
書き換えバインディングルールとマッチング原理
書き換えバインディングルールおよびマッチング原理は以下の通りです:
- プリペアドステートメントと同じ構文を使用して書き換えルールを定義します。
- 書き換えルールテンプレート内で「?」または「:{name}」をマッチング定数パラメータのマーカーとして使用します。
- 定数パラメータマーカーは、SQLキーワード、識別子、関数などには使用できません。
- 「?」または「:{name}」でマークされたパラメータ以外の定数値については、等価マッチングを行います。
- 複数のマッチング可能なルールが同時に存在する場合、最初にマッチしたルールをランダムに選択します。
- ルール作成時に指定されたUserに対して厳密なマッチングを行います。
以下の例では、書き換えルールテンプレート内で「:{name}」をマッチング定数パラメータのマーカーとして使用しています。
CALL DBMS_UDR.CREATE_RULE('rule1',
'test',
'select :A + 1 from dual',
'select :A + 10, 20 from dual');
以下の例では、書き換えルールテンプレート内で「?」をマッチング定数パラメータのマーカーとして使用しています。
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 を使用して、そのテナントで書き換えバインディング機能を有効にするかどうかを制御します。ルール作成時には、権限を制御するためにデータベースを指定します。
DBMS_UDRサブルーチンの概要
次の表は、OceanBaseデータベースの現在のバージョンでサポートされている DBMS_UDR サブルーチンとその簡潔な説明を示しています。
| サブルーチン | 説明 |
|---|---|
| CREATE_RULE | カスタムルールを作成します。 |
| DISABLE_RULE | カスタムルールを無効にします。 |
| ENABLE_RULE | カスタムルールを有効にします。 |
| REMOVE_RULE | カスタムルールを削除します。 |