Oracle Streamsでのルールベースの変換は、ポジティブ・ルール・セットのルールがTRUEに評価される場合に行われるメッセージの変更を意味します。ルールベースの変換には、宣言とカスタムの2つのタイプがあります。
次の項では、ルールベースの変換の管理について説明します。
|
注意: ルールがポジティブ・ルール・セットに含まれる場合にのみ、ルールに指定した変換が実行されます。ルールが取得プロセス、伝播、適用プロセスまたはメッセージ・クライアントのネガティブ・ルール・セットに含まれる場合、これらのOracle Streamsクライアントではルールベースの変換が無視されます。 |
宣言ルールベースの変換を管理するには、DBMS_STREAMS_ADMパッケージのADD_COLUMN、DELETE_COLUMN、RENAME_COLUMN、RENAME_SCHEMAおよびRENAME_TABLEプロシージャを使用します。
この項では、次のタスクの実行手順を説明します。
ここでは、宣言ルールベースの変換をルールに追加する例について説明します。
DBMS_STREAMS_ADMパッケージのRENAME_TABLEプロシージャを使用して、行LCR内の表名を変更する宣言ルールベースの変換を追加します。たとえば、次のプロシージャを実行すると、strmadminスキーマのjobs12ルールに宣言ルールベースの変換が追加されます。
BEGIN
DBMS_STREAMS_ADM.RENAME_TABLE(
rule_name => 'strmadmin.jobs12',
from_table_name => 'hr.jobs',
to_table_name => 'hr.assignments',
step_number => 0,
operation => 'ADD');
END;
/
このプロシージャによって追加された宣言ルールベースの変換では、ルールjobs12が行LCRについてTRUEと評価された場合に、行LCR内の表hr.jobsの名前がhr.assignmentsに変更されます。jobs12ルールに複数の宣言ルールベースの変換が指定された場合、step_numberパラメータが0(ゼロ)に設定されているため、この変換はデフォルトの変換順序に従って実行されます。また、operationパラメータがADDに設定されており、変換はルールから削除されるのではなく、ルールに追加されることを示しています。
RENAME_TABLEプロシージャでは、表の他にスキーマ名を変更する変換を追加することもできます。たとえば、前述の例でスキーマ名をoeに変更するように指定するには、to_table_nameパラメータにoe.assignmentsを指定します。
DBMS_STREAMS_ADMパッケージのADD_COLUMNプロシージャを使用して、行LCR内の行に列を追加する宣言ルールベースの変換を追加します。たとえば、次のプロシージャを実行すると、strmadminスキーマのemployees35ルールに宣言ルールベースの変換が追加されます。
BEGIN
DBMS_STREAMS_ADM.ADD_COLUMN(
rule_name => 'employees35',
table_name => 'hr.employees',
column_name => 'birth_date',
column_value => ANYDATA.ConvertDate(NULL),
value_type => 'NEW',
step_number => 0,
operation => 'ADD');
END;
/
このプロシージャによって追加された宣言ルールベースの変換では、ルールemployees35が行LCRについてTRUEと評価された場合に、行LCR内のhr.employees表の行に、データ型DATEのbirth_date列が追加されます。
ANYDATA.ConvertDateファンクションによって列の型および列の値が指定されることに注意してください。この例では、追加された列の値はNULLです。ただし、有効な日付を指定することもできます。追加する列に適したAnyDataファンクションを使用します。たとえば、追加する列のデータ型がNUMBERである場合、ANYDATA.ConvertNumberファンクションを使用します。
value_typeパラメータがNEWに設定されており、これは、行LCR内の新しい値に列が追加されることを示しています。OLDを指定して、古い値に列を追加することもできます。
employees35ルールに複数の宣言ルールベースの変換が指定された場合、step_numberパラメータが0(ゼロ)に設定されているため、この変換はデフォルトの変換順序に従って実行されます。また、operationパラメータがADDに設定されており、変換はルールから削除されるのではなく、ルールに追加されることを示しています。
|
注意: ADD_COLUMNプロシージャはオーバーロードされます。column_functionパラメータを指定すると、追加された列の値を現行のシステム日付またはタイムスタンプにすることができます。column_valueとcolumn_functionパラメータは相互に排他的です。 |
|
関連項目: AnyData型ファンクションの詳細は、Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンスを参照 |
宣言ルールベースの変換を追加するプロシージャのoperationパラメータをADDに設定すると、次のリストのパラメータが既存の変換パラメータと一致した場合に、既存の宣言ルールベースの変換が上書きされます。
ADD_COLUMNプロシージャ: rule_name、table_name、column_nameおよびstep_numberパラメータ
DELETE_COLUMNプロシージャ: rule_name、table_name、column_nameおよびstep_numberパラメータ
RENAME_COLUMNプロシージャ: rule_name、table_name、from_column_nameおよびstep_numberパラメータ
RENAME_SCHEMAプロシージャ: rule_name、from_schema_nameおよびstep_numberパラメータ
RENAME_TABLEプロシージャ: rule_name、from_table_nameおよびstep_numberパラメータ
たとえば、次のプロシージャを実行して、既存の宣言ルールベースの変換を作成したとします。
BEGIN
DBMS_STREAMS_ADM.RENAME_COLUMN(
rule_name => 'departments33',
table_name => 'hr.departments',
from_column_name => 'manager_id',
to_column_name => 'lead_id',
value_type => 'NEW',
step_number => 0,
operation => 'ADD');
END;
/
次のプロシージャを実行すると、この既存の宣言ルールベースの変換は上書きされます。
BEGIN
DBMS_STREAMS_ADM.RENAME_COLUMN(
rule_name => 'departments33',
table_name => 'hr.departments',
from_column_name => 'manager_id',
to_column_name => 'lead_id',
value_type => '*',
step_number => 0,
operation => 'ADD');
END;
/
この場合、宣言ルールベースの変換のvalue_typeパラメータがNEWから*に変更されています。つまり、元の変換では新しい値の名前のみが行LCRで変更されますが、新しい変換では古い値と新しい値の両方の名前が行LCRで変更されます。
宣言ルールベースの変換をルールから削除するには、変換を追加するために使用したものと同じプロシージャを使用しますが、operationパラメータにREMOVEを指定します。たとえば、「表名を変更する宣言ルールベースの変換の追加」で追加した変換を削除するには、次のプロシージャを実行します。
BEGIN
DBMS_STREAMS_ADM.RENAME_TABLE(
rule_name => 'strmadmin.jobs12',
from_table_name => 'hr.jobs',
to_table_name => 'hr.assignments',
step_number => 0,
operation => 'REMOVE');
END;
/
「宣言ルールベースの変換の管理」に示すいずれかの宣言変換プロシージャでoperationパラメータがREMOVEに設定されている場合、そのプロシージャのrule_nameパラメータ以外のパラメータはオプションになります。これらのオプションのパラメータがNULLに設定されている場合、これらはワイルドカードになります。
前述の例のRENAME_TABLEプロシージャは、1つ以上のオプションのパラメータがNULLに設定されている場合、次のように動作します。
| from_table_nameパラメータ | to_table_nameパラメータ | step_numberパラメータ | 結果 |
|---|---|---|---|
NULL |
NULL |
NULL |
指定したルールからすべての表名変更変換が削除されます |
NULL以外 |
NULL |
NULL |
指定したfrom_table_nameを含むすべての表名変更変換が、指定したルールから削除されます |
NULL |
NULL以外 |
NULL |
指定したto_table_nameを含むすべての表名変更変換が、指定したルールから削除されます |
NULL |
NULL |
NULL以外 |
指定したstep_numberを含むすべての表名変更変換が、指定したルールから削除されます |
NULL以外 |
NULL以外 |
NULL |
指定したfrom_table_nameおよびto_table_nameを含むすべての表名変更変換が、指定したルールから削除されます |
NULL |
NULL以外 |
NULL以外 |
指定したto_table_nameおよびstep_numberを含むすべての表名変更変換が、指定したルールから削除されます |
NULL以外 |
NULL |
NULL以外 |
指定したfrom_table_nameおよびstep_numberを含むすべての表名変更変換が、指定したルールから削除されます |
オプションのパラメータをNULLに設定してoperationパラメータをREMOVEに設定した場合、他の宣言変換プロシージャも同様に動作します。
ルールのカスタム・ルールベースの変換を設定または設定解除するには、DBMS_STREAMS_ADMパッケージのSET_RULE_TRANSFORM_FUNCTIONプロシージャを使用します。このプロシージャは、ルールのアクション・コンテキストを変更して、カスタム・ルールベースの変換を指定します。
この項では、次のタスクの実行手順を説明します。
|
注意: LCRのLONG、LONG RAWまたはLOB列のデータは、カスタム・ルールベースの変換で変更しないでください。 |
|
注意:
|
カスタム・ルールベースの変換ファンクションは、常に1つのメッセージに対して動作しますが、1つまたは多数のメッセージを戻すことができます。1つのメッセージを戻すカスタム・ルールベースの変換ファンクションは、1対1の変換ファンクションです。1対1の変換ファンクションには、次のシグネチャが必要です。
FUNCTION user_function ( parameter_name IN ANYDATA) RETURN ANYDATA;
user_functionはファンクション名で、parameter_nameはファンクションに渡されるパラメータの名前です。ファンクションに渡されるパラメータはメッセージをANYDATAにカプセル化したもので、ファンクションではANYDATAにカプセル化したメッセージを戻す必要があります。
2つ以上のメッセージを戻すことができるカスタム・ルールベースの変換ファンクションは、1対多の変換ファンクションです。1対多の変換ファンクションには、次のシグネチャが必要です。
FUNCTION user_function ( parameter_name IN ANYDATA) RETURN STREAMS$_ANYDATA_ARRAY;
user_functionはファンクション名で、parameter_nameはファンクションに渡されるパラメータの名前です。ファンクションに渡されるパラメータはメッセージをANYDATAにカプセル化したもので、ファンクションはカプセル化したANYDATAメッセージを0個以上含む配列を戻す必要があります。配列に含まれるカプセル化したANYDATAメッセージが0個の場合、元のメッセージは廃棄されます。1対多の変換ファンクションは、Oracle Streamsの取得プロセスおよび同期取得に対してのみサポートされます。
STREAMS$_ANYDATA_ARRAY型はOracleが提供する型で、次の定義を持ちます。
CREATE OR REPLACE TYPE SYS.STREAMS$_ANYDATA_ARRAY AS VARRAY(2147483647) of SYS.ANYDATA /
次の手順では、1対1のファンクションを使用するカスタム・ルールベースの変換を作成する一般的な手順について説明します。
SQL*Plusで、管理ユーザーまたはPL/SQLファンクションを所有するユーザーとしてデータベースに接続します。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
変換を実行するPL/SQLファンクションを作成します。
|
注意: 変換ファンクションが決定的であるようにしてください。決定的なファンクションでは、入力された引数の値がどのような組合せであっても、常に同じ値が戻されます。また、変換ファンクションで例外が発生しないようにしてください。例外により、取得プロセス、伝播または適用プロセスが無効化される場合があり、これらの処理を続行するために変換ファンクションの修正が必要になります。同期取得のカスタム・ルールベースの変換で例外が発生すると、その例外を発生させたDML文が強制終了されます。メッセージ・クライアントのカスタム・ルールベースの変換で例外が発生すると、メッセージ・クライアントでメッセージをデキューできなくなる場合があります。 |
次の例では、departments表のdepartment_name列の値をExecutiveからManagementに変更するファンクションexecutive_to_managementがhrスキーマ内に作成されます。会社の事業所の1つがこの部門に異なる名称を使用している場合に、このような変換が必要になることがあります。
CREATE OR REPLACE FUNCTION hr.executive_to_management(in_any IN ANYDATA)
RETURN ANYDATA
IS
lcr SYS.LCR$_ROW_RECORD;
rc NUMBER;
ob_owner VARCHAR2(30);
ob_name VARCHAR2(30);
dep_value_anydata ANYDATA;
dep_value_varchar2 VARCHAR2(30);
BEGIN
-- Get the type of object
-- Check if the object type is SYS.LCR$_ROW_RECORD
IF in_any.GETTYPENAME='SYS.LCR$_ROW_RECORD' THEN
-- Put the row LCR into lcr
rc := in_any.GETOBJECT(lcr);
-- Get the object owner and name
ob_owner := lcr.GET_OBJECT_OWNER();
ob_name := lcr.GET_OBJECT_NAME();
-- Check for the hr.departments table
IF ob_owner = 'HR' AND ob_name = 'DEPARTMENTS' THEN
-- Get the old value of the department_name column in the LCR
dep_value_anydata := lcr.GET_VALUE('old','DEPARTMENT_NAME');
IF dep_value_anydata IS NOT NULL THEN
-- Put the column value into dep_value_varchar2
rc := dep_value_anydata.GETVARCHAR2(dep_value_varchar2);
-- Change a value of Executive in the column to Management
IF (dep_value_varchar2 = 'Executive') THEN
lcr.SET_VALUE('OLD','DEPARTMENT_NAME',
ANYDATA.CONVERTVARCHAR2('Management'));
END IF;
END IF;
-- Get the new value of the department_name column in the LCR
dep_value_anydata := lcr.GET_VALUE('new', 'DEPARTMENT_NAME', 'n');
IF dep_value_anydata IS NOT NULL THEN
-- Put the column value into dep_value_varchar2
rc := dep_value_anydata.GETVARCHAR2(dep_value_varchar2);
-- Change a value of Executive in the column to Management
IF (dep_value_varchar2 = 'Executive') THEN
lcr.SET_VALUE('new','DEPARTMENT_NAME',
ANYDATA.CONVERTVARCHAR2('Management'));
END IF;
END IF;
END IF;
RETURN ANYDATA.CONVERTOBJECT(lcr);
END IF;
RETURN in_any;
END;
/
Oracle Streams管理者にhr.executive_to_managementファンクションのEXECUTE権限を付与します。
GRANT EXECUTE ON hr.executive_to_management TO strmadmin;
データベースにOracle Streams管理者として接続します。
hr.departments表のDML操作についてサブセット・ルールを作成します。このサブセット・ルールでは、手順2で作成した変換を使用します。
カスタム・ルールベースの変換を使用する場合、サブセット・ルールは不要です。この例では、複数の名前/値ペアを持つアクション・コンテキストの具体例を示すために、サブセット・ルールを使用しています。この例では、データベースdbs1.example.comの適用プロセスにサブセット・ルールを作成します。これらのルールがTRUEと評価されるのは、hr.departments表内のlocation_idが1700の1行に対するDML変更がLCRに含まれる場合です。この例では、streams_queueというANYDATAキューがデータベースに存在することを想定しています。
これらのルールを作成するには、次のADD_SUBSET_RULESプロシージャを実行します。
BEGIN
DBMS_STREAMS_ADM.ADD_SUBSET_RULES(
table_name => 'hr.departments',
dml_condition => 'location_id=1700',
streams_type => 'apply',
streams_name => 'strm01_apply',
queue_name => 'streams_queue',
include_tagged_lcr => FALSE,
source_database => 'dbs1.example.com');
END;
/
|
注意:
|
次の問合せを実行して、システムで作成されたルールの名前を特定します。
SELECT RULE_NAME, SUBSETTING_OPERATION FROM DBA_STREAMS_RULES WHERE OBJECT_NAME='DEPARTMENTS' AND DML_CONDITION='location_id=1700';
この問合せでは、次のような出力が表示されます。
RULE_NAME SUBSET ------------------------------ ------ DEPARTMENTS5 INSERT DEPARTMENTS6 UPDATE DEPARTMENTS7 DELETE
|
注意: この情報を取得するには、ADD_SUBSET_RULESを実行するときにOUTパラメータを使用する方法もあります。 |
これらはサブセット・ルールであるため、そのうちの2つには内部変換を実行するNULL以外のアクション・コンテキストが含まれています。
サブセット化条件INSERTを持つルールには、更新によってlocation_id列の値が他の値から1700に変更される場合に、更新を挿入に変換する内部変換が含まれています。内部変換は、挿入には影響しません。
サブセット化条件DELETEを持つルールには、更新によってlocation_id列の値が1700から他の値に変更される場合に、更新を削除に変換する内部変換が含まれています。内部変換は、削除には影響しません。
この例では、次の問合せを実行すると、ルールDEPARTMENTS5およびDEPARTMENTS7がNULL以外のアクション・コンテキストを持ち、ルールDEPARTMENTS6がNULLのアクション・コンテキストを持つことを確認できます。
COLUMN RULE_NAME HEADING 'Rule Name' FORMAT A13
COLUMN ACTION_CONTEXT_NAME HEADING 'Action Context Name' FORMAT A27
COLUMN ACTION_CONTEXT_VALUE HEADING 'Action Context Value' FORMAT A30
SELECT
RULE_NAME,
AC.NVN_NAME ACTION_CONTEXT_NAME,
AC.NVN_VALUE.ACCESSVARCHAR2() ACTION_CONTEXT_VALUE
FROM DBA_RULES R, TABLE(R.RULE_ACTION_CONTEXT.ACTX_LIST) AC
WHERE RULE_NAME IN ('DEPARTMENTS5','DEPARTMENTS6','DEPARTMENTS7');
この問合せでは、次のような出力が表示されます。
Rule Name Action Context Name Action Context Value ------------- --------------------------- ------------------------------ DEPARTMENTS5 STREAMS$_ROW_SUBSET INSERT DEPARTMENTS7 STREAMS$_ROW_SUBSET DELETE
DEPARTMENTS6ルールは、アクション・コンテキストがNULLであるため出力には表示されません。
SET_RULE_TRANSFORM_FUNCTIONプロシージャを実行して、カスタム・ルールベースの変換をサブセット・ルールごとに設定します。この手順では、このプロシージャをルールごとに実行し、hr.executive_to_managementを変換ファンクションとして指定します。他のユーザーがアクション・コンテキストを同時に変更していないことを確認してください。
BEGIN
DBMS_STREAMS_ADM.SET_RULE_TRANSFORM_FUNCTION(
rule_name => 'departments5',
transform_function => 'hr.executive_to_management');
DBMS_STREAMS_ADM.SET_RULE_TRANSFORM_FUNCTION(
rule_name => 'departments6',
transform_function => 'hr.executive_to_management');
DBMS_STREAMS_ADM.SET_RULE_TRANSFORM_FUNCTION(
rule_name => 'departments7',
transform_function => 'hr.executive_to_management');
END;
/
具体的には、このプロシージャでは、STREAMS$_TRANSFORM_FUNCTIONを名前として指定し、変換を実行するPL/SQLファンクションの名前を含むANYDATAインスタンスを値として指定する各ルールのアクション・コンテキストに、名前/値ペアが追加されます。この場合、変換ファンクションはhr.executive_to_managementです。
|
注意: SET_RULE_TRANSFORM_FUNCTIONでは、指定した変換ファンクションが存在するかどうかは検証されません。そのファンクションが存在しない場合、Oracle Streamsのプロセスまたはジョブで変換ファンクションの起動が試行されたときにエラーが発生します。 |
これらのルールのアクション・コンテキスト内の名前/値ペアを表示する問合せを実行すると、DEPARTMENTS6ルールを含め、ルールごとにカスタム・ルールベースの変換用の名前/値ペアが表示されます。
SELECT
RULE_NAME,
AC.NVN_NAME ACTION_CONTEXT_NAME,
AC.NVN_VALUE.ACCESSVARCHAR2() ACTION_CONTEXT_VALUE
FROM DBA_RULES R, TABLE(R.RULE_ACTION_CONTEXT.ACTX_LIST) AC
WHERE RULE_NAME IN ('DEPARTMENTS5','DEPARTMENTS6','DEPARTMENTS7');
この問合せでは、次のような出力が表示されます。
Rule Name Action Context Name Action Context Value ------------- --------------------------- ------------------------------ DEPARTMENTS51 STREAMS$_ROW_SUBSET INSERT DEPARTMENTS51 STREAMS$_TRANSFORM_FUNCTION "HR"."EXECUTIVE_TO_MANAGEMENT" DEPARTMENTS52 STREAMS$_TRANSFORM_FUNCTION "HR"."EXECUTIVE_TO_MANAGEMENT" DEPARTMENTS53 STREAMS$_ROW_SUBSET DELETE DEPARTMENTS53 STREAMS$_TRANSFORM_FUNCTION "HR"."EXECUTIVE_TO_MANAGEMENT"
また、DBA_STREAMS_TRANSFORM_FUNCTIONデータ・ディクショナリ・ビューを使用して、変換ファンクションを表示することもできます。
|
関連項目: この例で使用したSET_RULE_TRANSFORM_FUNCTIONおよびルールのタイプの詳細は、Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンスを参照 |
カスタム・ルールベースの変換を変更するには、変換ファンクションを編集するか、またはSET_RULE_TRANSFORM_FUNCTIONプロシージャを実行して異なる変換ファンクションを指定します。この例では、SET_RULE_TRANSFORM_FUNCTIONプロシージャを実行して異なる変換ファンクションを指定します。SET_RULE_TRANSFORM_FUNCTIONプロシージャでは、指定したルールのアクション・コンテキストが変更され、異なる変換ファンクションが実行されるようになります。変換ファンクション自体を編集する場合は、このプロシージャを実行する必要はありません。
この例では、変換ファンクションをhr.execute_to_managementからhr.executive_to_leadに変更して、ルールDEPARTMENTS5のカスタム・ルールベースの変換を変更します。hr.execute_to_managementルールベースの変換は、「カスタム・ルールベースの変換の作成」の例のDEPARTMENTS5ルールに追加したものです。
Oracle Streamsでは、場合によっては、UPDATE操作をINSERTおよびDELETE操作に変換する内部変換が、アクション・コンテキスト内の名前/値ペアを使用してサブセット・ルールによって実行されます。このような変換は、行の移行と呼ばれます。SET_RULE_TRANSFORM_FUNCTIONプロシージャでは、行の移行を実行する名前/値ペアが保持されます。
カスタム・ルールベースの変換を変更するには、次の手順を実行します。
次の問合せを実行すると、ルールのアクション・コンテキスト内のすべての名前/値ペアを表示できます。
COLUMN ACTION_CONTEXT_NAME HEADING 'Action Context Name' FORMAT A30
COLUMN ACTION_CONTEXT_VALUE HEADING 'Action Context Value' FORMAT A30
SELECT
AC.NVN_NAME ACTION_CONTEXT_NAME,
AC.NVN_VALUE.ACCESSVARCHAR2() ACTION_CONTEXT_VALUE
FROM DBA_RULES R, TABLE(R.RULE_ACTION_CONTEXT.ACTX_LIST) AC
WHERE RULE_NAME = 'DEPARTMENTS5';
この問合せでは、次のような出力が表示されます。
Action Context Name Action Context Value ------------------------------ ------------------------------ STREAMS$_ROW_SUBSET INSERT STREAMS$_TRANSFORM_FUNCTION "HR"."EXECUTIVE_TO_MANAGEMENT"
SET_RULE_TRANSFORM_FUNCTIONプロシージャを実行して、DEPARTMENTS5ルールの変換ファンクションをexecutive_to_leadに設定します。この例では、新しい変換ファンクションがhr.executive_to_leadで、strmadminユーザーにはそのEXECUTE権限が付与されていると想定しています。
BEGIN
DBMS_STREAMS_ADM.SET_RULE_TRANSFORM_FUNCTION(
rule_name => 'departments5',
transform_function => 'hr.executive_to_lead');
END;
/
変換ファンクションが正しく変更されたかどうかを確認するには、手順1の問合せを再実行します。3つのサブセット・ルールの一貫性を保つために、DEPARTMENTS6およびDEPARTMENTS7ルールのアクション・コンテキストも同様に変更する必要があります。
|
注意:
|
カスタム・ルールベースの変換をルールから設定解除するには、SET_RULE_TRANSFORM_FUNCTIONを実行し、変換ファンクションにNULLを指定します。NULLを指定すると、ルールのアクション・コンテキストでカスタム・ルールベースの変換を指定する名前/値ペアが設定解除されます。この例では、ルールDEPARTMENTS5からカスタム・ルールベースの変換を設定解除します。この変換は、「カスタム・ルールベースの変換の作成」の例のDEPARTMENTS5ルールに追加したものです。
Oracle Streamsでは、場合によっては、UPDATE操作をINSERTおよびDELETE操作に変換する内部変換が、アクション・コンテキスト内の名前/値ペアを使用してサブセット・ルールによって実行されます。このような変換は、行の移行と呼ばれます。SET_RULE_TRANSFORM_FUNCTIONプロシージャでは、行の移行を実行する名前/値ペアが保持されます。
次のプロシージャを実行して、ルールDEPARTMENTS5のカスタム・ルールベースの変換を設定解除します。
BEGIN
DBMS_STREAMS_ADM.SET_RULE_TRANSFORM_FUNCTION(
rule_name => 'departments5',
transform_function => NULL);
END;
/
変換ファンクションが設定解除されたかどうかを確認するには、手順1の問合せを実行します。3つのサブセット・ルールの一貫性を保つために、DEPARTMENTS6およびDEPARTMENTS7ルールのアクション・コンテキストも同様に変更する必要があります。