オブジェクトのAssignイベントによってトリガーされたプログラムの内部で、トリガー・オブジェクトに値を代入します。
例
例10-166 Assignトリガーを使用した代替値の代入
アナリティック・ワークスペースに、次のような記述を持つオブジェクトがあるとします。
DEFINE GEOG.D DIMENSION TEXT DEFINE TIME.D DIMENSION TEXT DEFINE TIME.PARENTREL RELATION TIME.D <TIME.D> DEFINE SALES VARIABLE DECIMAL <GEOG.D TIME.D> DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
次のレポートに示す値をsales
変数に移入したが、modified_sales
変数にはまだ移入していないとします。
-----------------------SALES----------------------- ----------------------GEOG.D----------------------- TIME.D Boston Medford San Diego Sunnydale ------------ ------------ ------------ ------------ ------------ Jan76 1,000.00 2,000.00 3,000.00 4,000.00 Feb76 2,000.00 4,000.00 6,000.00 8,000.00 Mar76 3,000.00 6,000.00 9,000.00 12,000.00 76Q1 NA NA NA NA
ここで、様々な式を使用して、modified_sales
変数に値を代入しますが、値は1,000以下にならないようにします。この処理を確実に実行するには、次の手順に従います。
1000以下の値という条件を調べる次のプログラムを作成します。
DEFINE TRIGGER_ASSIGN_MODIFIED_SALES PROGRAM PROGRAM ARGUMENT datavalue DECIMAL IF datavalue LE 1000 THEN TRIGGERASSIGN 1000 show 'description of triggering object = ' DESCRIBE &TRIGGER(NAME) SHOW JOINCHARS ('calltype = ' CALLTYPE) SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT)) SHOW JOINCHARS ('triggering subevent = ' TRIGGER(SUBEVENT)) SHOW JOINCHARS ('value passed to program = ' datavalue) SHOW ' ' END
次の文を発行して、Assignトリガーをmodified_sales
変数に追加します。trigger_assign_modified_sales
プログラムはトリガー・プログラムです。
CONSIDER modified_sales TRIGGER ASSIGN trigger_assign_modified_sales
値をmodified_sales
に代入します。
modified_sales = sales - 1000
この文は、Oracle OLAPによって代入された値ごとにtrigger_assign_modified_sales
プログラムの実行をトリガーします。
description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 0.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 1,000.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 2,000.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 3,000.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 1,000.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 3,000.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 5,000.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 7,000.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 2,000.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 5,000.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 8,000.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = 11,000.00 description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program = description of triggering object = DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D> TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES calltype = TRIGGER triggering event = ASSIGN triggering subevent = value passed to program =
modified_sales
の次のレポートでは、すべての値が1,000以上になっています。
------------------MODIFIED_SALES------------------- ----------------------GEOG.D----------------------- TIME.D Boston Medford San Diego Sunnydale ------------ ------------ ------------ ------------ ------------ Jan76 1,000.00 1,000.00 2,000.00 3,000.00 Feb76 1,000.00 3,000.00 5,000.00 7,000.00 Mar76 2,000.00 5,000.00 8,000.00 11,000.00 76Q1 NA NA NA NA