SqlComputeCode (プロパティ・キーワード)
使用法
プロパティの計算方法を指定するには、以下の構文を使用します。
Property name As classname [ SqlComputeCode = { Set {FieldName} = Expression }, SqlComputed ];
以下は、この指定の説明です。
-
FieldName — 定義されるプロパティの SQL フィールド名。
-
Expression — プロパティの値を指定する ObjectScript 式。
詳細
このキーワードを指定した場合 (また、SqlComputed が True の場合)、このプロパティは計算プロパティとなります。"計算プロパティの定義" を参照してください。
このキーワードの値については、以下の規則に従って、プロパティの値を設定する ObjectScript コードの行を指定します (中括弧で囲む)。
-
このプロパティを参照するには、{*} を使用します。
また、SqlFieldName キーワードがプロパティに対して指定されていない場合は、{propertyname} を使用します。この propertyname はプロパティの名前です。SqlFieldName キーワードがプロパティに対して指定されている場合は、{sqlfieldnamevalue} を使用します。この sqlfieldnamevalue は、そのキーワードの値です。
SqlFieldName が役立つのは永続クラスに対してのみですが、すべてのオブジェクト・クラスに使用できます。
ObjectScript コード内のフィールド名の詳細は、"リテラル・プロパティの SQL プロジェクションの制御" または "CREATE TRIGGER" を参照してください。
-
同様に、別のプロパティを参照するために、SqlFieldName キーワードがプロパティに対して指定されていない場合は、{propertyname} を使用します。この propertyname はプロパティの名前です。SqlFieldName キーワードがプロパティに対して指定されている場合は、{sqlfieldnamevalue} を使用します。この sqlfieldnamevalue は、そのキーワードの値です。
{Propertyname} 内で、矢印構文または相対ドット構文を使用することはできません。例えば、{objectprop.propA} や {objectprop->propA} のような表現はサポートされていません。
-
必要に応じて、コードに複数の Set コマンドを含めることができます。等号の前後には空白文字を使用できますが、Set 文のそれぞれは全体を 1 行で記述する必要があります。
-
コードでは、通常の完全構文を使用して、クラス・メソッド (インスタンス・メソッドではない)、ルーチン、またはサブルーチンを参照できます。同様に、ObjectScript 関数と演算子を使用できます。
-
コードには、埋め込み SQL を含めることができます。
-
コードには、以下の擬似フィールド参照変数を含めることができます。これは、クラスのコンパイル時に特定の値に変換されます。
-
{%%CLASSNAME} と {%%CLASSNAMEQ} は、ともに SQL テーブル定義を投影するクラスの名前に変換されます。{%%CLASSNAME} は引用符なし文字列を返し、{%%CLASSNAMEQ} は引用符付き文字列を返します。
-
{%%TABLENAME} はテーブルの完全修飾名に変換され、引用符付き文字列を返します。
-
{%%ID} は RowID 名に変換されます。この参照は、RowID フィールドの名前がわからないときに役立ちます。
これらの名前は、大文字と小文字を区別しません。
-
-
計算コードは必ず ObjectScript で記述します。Python などの他の言語によるコードを指定するには、代わりに PropertyComputation クラス・メソッドを指定します。PropertyComputation は計算するプロパティの名前です。詳細は、"計算プロパティ値" を参照してください。
SqlComputeCode メソッドと PropertyComputation メソッドの両方を指定すると、SqlComputeCode によって PropertyComputation がオーバーライドされます。
-
コードでは、..propertyname の形式および ..methodname() の形式の構文は使用できません。
以下に例を示します。
Property TestProp As %String [ SqlComputeCode = {set {*} = {OtherField}}, SqlComputed ];
別の例を示します。
Property FullName As %String [ SqlComputeCode = {set {*}={FirstName}_" "_{LastName}}, SqlComputed ];
このコードは、Do コマンドで呼び出します。
-
このフィールドのインデックス付けを予定している場合は、非決定的コードではなく、決定的コードOpens in a new tabを使用します。非決定的コードは、古いインデックス・キー値を確実に削除することができないため、InterSystems IRIS は非決定的コードの結果に対するインデックスを保持できません。(決定的コードは、同じ引数を渡された場合はいつでも同じ値を返します。例えば、$h を返すコードは、$h が関数の制御外で変更されているため、非決定的です。)
-
SqlComputeCode で使用されるユーザ変数はすべて、使用前に New が適用されます。これにより、関連コード内の別の場所にある同名変数との競合を回避できます。
既定値
既定値は空文字列です。