最近のアクセス:
For Each コマンド

GeneXus のプロシージャー言語コマンドは、データベースから情報を取得するために使用します。プロシージャーで使用される場合には、データベースを読み込むだけでなく、更新することもできます。
For each コマンド内では、情報の取得元のトランザクションレベルおよび使用する項目属性の名前を指定して、読み取る情報 (Procedure オブジェクト内では書き込む情報も) を定義します。また、このコマンドには、クエリを微調整するための多くのオプション節が用意されています。

構文

For each [ <ベーストランザクションのリスト> ]
[ SKIP <エクスプレッション> COUNT <エクスプレッション> ]
[ <Order リスト> ]
[ <データセレクターの使用> ]
[ <固有の項目属性のリスト> ]
[ <条件リスト> ]
[ <グループのブロック> ]
<メインのコード>
[ When duplicate
[ <When Duplicate 節のコード> ] ]
[ When none
[ <When None 節のコード> ] ]
Endfor
入力値の説明:
<ベーストランザクションのリスト> ::=
<トランザクション1> {, <トランザクションi>}...
トランザクションレベルのレベル名のリストです。詳細については、「ベーストランザクション節」を参照してください。
 
<Order リスト> ::=
{ {order <項目属性のリスト>i [ when <条件>i ] } | [ order none ] [ when <条件>x ] }...
クエリの結果が返される順番を指定することができます。構文に示しているように、条件付き Order 節および未定義の順序 (Order None 節) を多数記述できます。
<データセレクターの使用> ::=
using <データセレクター名>( [ <パラメーターのリスト> ] )
<データセレクター名> を指定して、データセレクターで決められている条件のセットに従って並べ替えとフィルタリングを行います。
<固有の項目属性のリスト> ::=
unique <項目属性のリスト>
参照される項目属性の値セットが一意であるレコードのみを返します。詳細については、「Unique 節」を参照してください。
<条件リスト> ::=
{where {<条件> [ when <条件> ] } |
  { [ not ] <項目属性> in <データセレクター名>( [ <パラメーターのリスト> ] ) }
}...  
(<メインのコード> 内の) For Each で処理するデータが満たす必要のある条件のリストを指定できます。この条件にはブール式、簡単な式または非常に複雑なネストされた式を指定できます。
詳細については、「Where 節」(条件構文を含む) を参照してください。
<グループのブロック> ::=
blocking <数値式>
プロシージャーで使用できます (更新または削除の場合)。更新または削除を行う場合、DBMS への通信回数を削減するために、データベースブロックを構成するレコード数を示します。詳細については、「For Each コマンドにおける Blocking 節」を参照してください。
<メインのコード> ::=
<コマンドのリスト>
 
<When Duplicate 節のコード> ::=
<コマンドのリスト>
<メインのコード> 内で、特定の項目属性が更新 (上書き) され、その項目属性に対する一意のインデックスが存在する場合、プロシージャーで使用できます。既存の値でレコードを上書きする場合は、<メインのコード> の代わりにこのコードがレコードに対して実行されます。詳細については、「When duplicate 節」を参照してください。
<When None 節のコード> ::=
<コマンドのリスト>
フィルタ条件に合致するデータがない場合、<メインのコード> コマンドは実行されません。代わりに <When None 節のコード> コマンドが実行されます。詳細については、「When None 節」を参照してください。

以前のバージョンの GeneXus の Defined By 節 (構文内の <条件リスト><グループのブロック> の間に記載) を使用することはできますが、ベーストランザクション節に対しては無効になります。

最適化

where 節のブール式は、取得されるデータセットを制限します。ただし、それだけではありません。フル スキャン テーブル アクセスとインデックスで最適化されたランダムアクセスには大きな違いがあります。一定の論理ルールを適用する場合、GeneXus は order 節 (あるいは主キーの順序) が、where ブール式と互換性があると判断します。フル テーブル スキャンを行わず、インデックスを使い、テーブルへのアクセスを最適化します。これは、どのような場合にも望ましい動作です。
詳細については、「条件付きフィルタと順序」を参照してください。

スマート デバイス アプリケーション

For each コマンドは、Native Mobile ジェネレーターのアプリケーションの開発時に使用できますが、いくつか考慮事項があります。Work With オブジェクト (GeneXus17)および Panel for Smart Devices オブジェクトスマートデバイス用のシステムイベント (StartRefreshLoad の各イベント) でしか使用できません。

参考情報

ネストされた For Each コマンド

動画

イメージ:20668.png Introduction to For Each command to access the database
イメージ:20668.png More on nested For eachs. Cases and navigation
イメージ:20668.png Syntax of the For each command



サブページ
Created: 15/01/09 02:10 by Admin Last update: 20/12/27 21:39 by Admin
カテゴリ
Powered by GXwiki 3.0