クエリの結果が返される順番を指定します。
For Each コマンド、
データプロバイダーのグループ、
データセレクターおよび
グリッドに適用されます。
order <
att1>, ..., <
attN> [
when <Condition> ] | {
order none [
when <Condition> ] ...
入力値の説明:
att1, ...,
attN
コンマ区切りによる項目属性のリストです。言及する各項目属性は、丸かっこ付きまたは丸かっこなしのナレッジベース項目属性である必要があります。順序項目属性が丸かっこでくくられている場合、この項目属性は降順であることを示します。
ここでは、拡張テーブル項目属性および
式項目属性に言及することができます。ただし、一元管理されたプラットフォームで作業している場合、各
ベーステーブルに格納された項目属性しか使用できません。式項目属性はサーバーで評価する必要があります。
Condition
一元管理されているプラットフォームでは、order 節は 1 個しか指定できず、条件の指定 (when) もできません。クライアント/サーバープラットフォームの場合、
複数の条件付き order 節を定義し、必ず最後に
1 個の条件なし order 節を記述します。理由は、条件 (when 条件) を 1 つずつ評価し、最初の True でその条件を選択して、複数の order 節のうち 1 つだけが発効されるためです。条件が 1 つも True にならず、条件なしの節 (when なしの節) に達した場合は、条件なしの order 節が発効されます。そのような節がない場合、順序が
未定義になり、プラットフォームごとに異なったり、実行ごとに異なったりします。条件付き order 節を記述する理由は、クエリを最適化するためです。
order none
これは、特定の順序で返す必要がなく、未定義のままにしておきたい場合に使用します。
生成される最終的な順序が、ユーザーの指定と若干異なることがあります。これは、データベースへのアクセスを最適化するために、GeneXus Specifier がほかの検討事項を考慮したためです。
基本的に、order 節の
生成においては、次の情報が考慮されます (コードにおける低レベルの指定):
- ユーザーが指定した、order 節の項目属性。
- レベルに適用される制限: パラメーターによってインスタンス化される項目属性、コンテキストでインスタンス化される項目属性 (高レベルの For each、グループ、グリッドなど)、明示的な条件 (For each かグループかの 'where' 条件、グリッドかデータセレクターかの 'conditions' プロパティ、一般的な条件かどうかの 'conditions' セレクターなど)
- 項目属性にインデックスがあるかどうか
つまり、Order 節を使用して、レコードの処理や取得を実行する順序を指定します。しかし、実際に処理を行うために、指定子によりこの節にコンテキスト情報を補い (定義済みのインデックスや等条件などが存在する場合)、パフォーマンスを高めることができます。ただし、最終的に実行計画を決定するのは DBMS 自体です。とは言え、データが明示的な順序で取得されることを理解しておくことが重要です。詳細については、「
Order 節の指定」を参照してください。
前述の考慮事項は、一元管理されたプラットフォームには適用されないことがあります。この場合、GeneXus は、レベルのベーステーブル内にあるインデックスを項目属性リストを考慮して検索します。インデックスがない場合、プログラムを実行するたびに一時インデックスを作成します。一時インデックスの生成には非常に時間がかかる場合があります。その場合は、
ユーザーインデックスの作成を推奨します。
順序が指定されていない場合:
- レベルが別のレベルにネストされている場合: GeneXus は、外部の順序すべてにマッチするインデックスの検索を試行し、パフォーマンスを最適化します。
- それ例外の場合: ベーステーブルの主キーが選択されます。