この例は、必要なOVERRIDE権限を持たないユーザーが行レベル セキュリティのSELECT制約があるテーブル上でMERGEリクエストを実行する場合に、SELECT制約の述部がソース行に適用される方法を示します。SELECT制約は、MERGEリクエストを送信するユーザーが表示を許可されない行をフィルタリングします。SELECT制約の述部はMATCH条件に追加されます。
EXPLAIN文は、リクエストの実行に係わる手順および制約の述部の適用結果を示すために使用されます。
この例でテーブルの作成に使用される文は、以下のとおりです。
CREATE TABLE rls_src_tbl( col1 INT, col2 INT, classification_levels CONSTRAINT, classification_categories CONSTRAINT); CREATE TABLE rls_tgt_tbl( col1 INT, col2 INT, classification_levels CONSTRAINT, classification_categories CONSTRAINT);
ユーザーのセッション制約値は、次のとおりです。
Constraint1Name LEVELS Constraint1Value 2 Constraint3Name CATEGORIES Constraint3Value '90000000'xb
このEXPLAIN文は、MERGEリクエストの実行に係わる手順およびSELECT制約の述部の適用結果を示すために使用されます。
MERGE INTO rls_tgt_tbl USING rls_src_tbl ON (rls_tgt_tbl.col1=1) WHEN MATCHED THEN UPDATE SET col2=3 WHEN NOT MATCHED THEN INSERT (1,1,rls_src_tbl.levels,rls_src_tbl.categories);
EXPLAINは、条件("((SYSLIB.SELECTCATEGORIES ('90000000'XB, RS.rls_src_tbl.categories ))= 'T') AND ((SYSLIB.SELECTLEVEL (2, RS.rls_src_tbl.levels ))= 'T')")のRS.rls_src_tblからのRETRIEVEステップを示します。
結果は、条件("(((SYSLIB.SELECTCATEGORIES ('90000000'XB, {RightTable}.CATEGORIES)) = 'T') AND ((SYSLIB.SELECTLEVEL (2, {RightTable}.LEVELS )) = 'T')) AND (RS.rls_tgt_tbl.col1 = Field_4)")のRS.rls_tgt_tblへの一致更新および不一致挿入によってマージされます。