SqlComputeOnChange (プロパティ・キーワード)
使用法
プロパティをいつ再計算するかを指定するには、以下の構文を使用します。
Property name As classname [ SqlComputed, SqlComputeCode=sqlcomputecode, SqlComputeOnChange = propertynames ];
引数は以下のとおりです。
-
sqlcomputecode には、プロパティの計算に使用するコードを指定します (SqlComputeCode の説明を参照)。計算コードを PropertyComputation メソッドで定義する場合は SqlComputeCode を省略します。詳細は、"計算プロパティ値" を参照してください。
-
propertynames には、1 つのプロパティ名、または複数のプロパティ名のコンマ区切りリストのいずれかを指定します。この値には、値 %%INSERT または %%UPDATE を含めることもできます。SqlFieldname によって与えられる値ではなく、実際のプロパティ名を使用する必要があることに注意してください。
詳細
このキーワードは、トリガされる計算プロパティにのみ適用可能であり、他のプロパティでは無視されます。(トリガされる計算プロパティは、SqlComputed が True で、SqlComputeCode が指定されているが、Calculated および Transient が両方とも False のプロパティです。"計算プロパティの定義" を参照してください。)
このキーワードでは、このプロパティを再計算する条件を制御します。以下の場合に、再計算が行われます。
-
指定されているプロパティの変更
-
トリガ・イベントの発生
キーワードに %%INSERT または %%UPDATE の値が指定されている場合は、INSERT 呼び出しまたは UPDATE 呼び出しが、フィールド (プロパティ) の値のイベント・トリガ計算をそれぞれ指定します。
-
%%INSERT を指定すると、InterSystems IRIS は行がテーブルに挿入されたときにフィールドの値を計算します。InterSystems IRIS は、SQLComputeCode キーワードで指定されたコードを呼び出して、値を設定します。SQLComputeCode が同じフィールドを入力値として使用している場合、InterSystems IRIS はそのフィールドに対して明示的に指定された値を使用します。値が指定されていない場合、InterSystems IRIS は InitialExpression (これが指定されている場合) または NULL (InitialExpression が指定されていない場合) を使用します。
-
%%UPDATE を指定すると、InterSystems IRIS は行がテーブルに挿入されたときにフィールドの値を計算し、行が更新されたときにそれを再計算します。どちらの場合も、InterSystems IRIS は、SQLComputeCode キーワードで指定されたコードを呼び出して、値を設定します。SQLComputeCode が同じフィールドを入力値として使用している場合、InterSystems IRIS はそのフィールドに対して明示的に指定された値を使用します。値が指定されていない場合、InterSystems IRIS は前のフィールド値を使用します。
イベント・トリガ計算は、検証と正規化の直前に発生します (検証と正規化の後にデータベースへの値の書き込みが続きます)。
この例では、行が挿入または更新されると、プロパティ LastUpdate が現在の日付と時刻で更新されます。
Property LastUpdate As %TimeStamp [ SqlComputeCode = {set {*}=$ZDATETIME($NOW(),3)}, SqlComputed, SqlComputeOnChange = (%%INSERT, %%UPDATE) ];
フィールド値のイベント・トリガ計算は、プロパティ値を計算するコードによっては、プロパティに対して明示的に指定されている値をオーバーライドすることがあります。
既定値
SqlComputeOnChange キーワードの既定値は、空の文字列です。