注
コミュニティの関心グループが Yammer から Microsoft Viva Engage に移行されました。 Viva Engage コミュニティに参加し、最新のディスカッションに参加するには、「 Finance and Operations Viva Engage Community へのアクセスを要求する 」フォームに入力し、参加するコミュニティを選択します。
データを処理するには、 while select ステートメントを使用します。 select ステートメントの最も広く使用されている形式です。 while select ステートメントは、特定の基準を満たす多くのレコードをループし、各レコードでステートメントを実行することができます。 while select ステートメントの構文は、select ステートメントの構文に似ていますが、このステートメントはselect ではなく while select により処理されます。
通常、 while select ステートメントを使用してデータ操作を行う場合は、トランザクションで使用してデータの整合性を確保します。
while select ステートメントは、テーブル バッファー変数の結果を返します。
selectステートメントでフィールドリストを使用すると、テーブル変数ではそれらのフィールドのみが使用可能です。
sum や count などの集計関数を使用すると、結果は sum または count を実行するフィールドに返されます。 整数フィールドおよび実数フィールのみを計算、平均、または合計することができます。
select ステートメント自体は、ループ内のステートメントの最初の反復の直前に 1 回だけ実行されます。
while select ステートメントに追加するブール式 (iCounter < 1 など) は、1 回だけテストされます。 この動作は、C++ や C# などの言語の while 文の動作とは異なります。 たとえば、次のループは、複数回繰り返します。
int iCounter = 0; BankAccountTable xrecBAT; while select * from xrecBAT where iCounter < 1 { iCounter++; info(strFmt("%1 , %2", iCounter, xrecBAT.AccountID)); }
次の例では、アカウント番号が指定された範囲内にある CustTable テーブルのすべての顧客の AccountNum と SalesGroup の値を出力します。
CustTable custTable;
while select custTable
order by custTable.AccountNum
where custTable.AccountNum >= '4010' && custTable.AccountNum <= '4100'
{
info(strFmt("%1 , %2", custTable.AccountNum, custTable.SalesGroup));
}