VALUEIN ER 関数
VALUEIN
関数は指定された入力が、指定されたリスト内の指定された項目の値と一致するかどうかを決定します。 指定された入力が、指定されたリストの少なくとも 1 つのレコードに対して指定された式を実行した結果と一致する場合、TRUE のブール値を返します。 それ以外の場合は、FALSE のブール値が返されます。
構文
VALUEIN (input, list, list item expression)
引数
input
: フィールド
レコード リスト タイプのデータ ソースの項目の有効なパス。 この項目の値は一致します。
list
: レコード リスト
レコード リスト データ型のデータ ソースの項目の有効なパス。
list item expression
: ブール値
照合に使用される指定されたリストの単一のフィールドを指し示すか、そのフィールドを含む有効な条件式。
戻り値
ブール値
結果ブール値。
使用上の注意
一般に、VALUEIN
関数は一連の OR 条件に変換されます。 OR 条件の一覧が大きく、SQL ステートメントの最大長を超える場合は、VALUEINLARGE
機能を使用することを検討してください。
(input = list.item1.value) OR (input = list.item2.value) OR …
場合によっては、EXISTS JOIN
オペレーターを使用してデータベース SQL ステートメントに変換されます。
例 1
モデル マッピングで、計算済フィールド タイプのリスト データ ソースを定義します。 このデータ ソースには、式 SPLIT ("a,b,c", ",")
が含まれています。
データ ソースが呼び出されると、VALUEIN ("B", List, List.Value)
式として構成されている場合は、TRUE を返します。 この場合、VALUEIN
関数は次の一連の条件に変換されます。("B" = "b")
が TRUE と等しい場合、(("B" = "a") or ("B" = "b") or ("B" = "c"))
。
データ ソースが呼び出されると、VALUEIN ("B", List, LEFT(List.Value, 0))
式として構成されている場合は、FALSE を返します。 この場合、VALUEIN
関数は次の一連の条件に変換されます。 TRUE と等しくない ("B" = "")
。
このような条件のテキストの文字数の上限は 32,768 文字です。 したがって、実行時に制限を超える可能性があるデータ ソースを作成しないでください。 制限を超過した場合は、アプリケーションは実行を停止し、例外がスローされます。 たとえば、この状況は、データ ソースが WHERE (List1, VALUEIN (List1.ID, List2, List2.ID)
として構成され、List1 および List2 リストに大量のレコードが含まれているときに生じます。
場合によっては、VALUEIN
関数は EXISTS JOIN
オペレーターを使用することでデータベース ステートメントに変換されます。 この動作は、FILTER
関数が使用され、次の条件が満たされているときに発生します:
- ASK FOR QUERY オプションは、レコードのリストを参照する
VALUEIN
関数のデータ ソースに対してオフになっています。 このデータ ソースには実行時に適用される追加の条件はありません。 - 入れ子になった式は、レコードのリストを参照する
VALUEIN
関数のデータ ソース用に構成されません。 VALUEIN
関数のリスト項目は、指定されたデータ ソースの式またメソッドではなく、指定されたデータ ソースのフィールドを参照します。
この例の前半で説明した WHERE
関数の代わりにこのオプションを使用することを検討してください。
例 2
モデル マッピングでは、次のデータ ソースを定義します。
- テーブル レコード タイプの In データ ソース。 このデータ ソースは、イントラスタット テーブルを参照します。
- テーブル レコード タイプのポート データ ソース。 このデータ ソースは、IntrastatPort テーブルを参照します。
FILTER (In, VALUEIN(In.Port, Port, Port.PortId)
式として構成されたデータ ソースが呼び出されると、次の SQL ステートメントが生成され、イントラスタット テーブルのフィルターされたレコードを返します。
select … from Intrastat
exists join TableId from IntrastatPort
where IntrastatPort.PortId = Intrastat.Port
dataAreaId フィールドの場合、IN
演算子を使用して最終的な SQL ステートメントが生成されます。
例 3
モデル マッピングでは、次のデータ ソースを定義します。
- 計算済フィールド タイプの Le データ ソース。 このデータ ソースには、式
SPLIT ("DEMF,GBSI,USMF", ",")
が含まれています。 - テーブル レコード タイプの In データ ソース。 このデータ ソースはイントラスタット テーブルを参照し、会社間オプションが有効になっています。
FILTER (In, VALUEIN (In.dataAreaId, Le, Le.Value)
式として構成されたデータ ソースが呼び出されると、最終的な SQL ステートメントには次の条件が含まれています。
Intrastat.dataAreaId IN ('DEMF', 'GBSI', 'USMF')