高度なカスタマイズ > サービスおよびインフラストラクチャのカスタマイズ > アドバンス照会機能 > SearchCondition > 並べ替え
  
並べ替え
照会はデータベースレベルで結果データを並べ替えるために使用します。ただし、通常、データベースの並べ替えはページング照会と ColumnExpressions のみを伴う照会に適用されます。その他のタイプの照会では、いくつかの別々の SQL ステートメントとして実装し、並べ替えは照会全体ではなくステートメントごとに行われます。任意の ColumnExpression を並べ替えコラムとして使用できます。OrderBy アイテムを使用して ColumnExpressionStatementSpec に渡されます。また、OrderBy は、並べ替え順 (昇順または降順) およびオプションのロケールを示します。ロケールを指定すると、データベース言語サポートを使用して、任意の文字ベースの属性がそのロケールに関して並べ替えられます。Oracle の場合は、National Language Support (NLS) です (詳細については、Oracle のドキュメンテーションを参照)。Java Locale 値は dbservice.properties エントリを介して Oracle NLS 言語の並べ替え名にマッピングされます。
標準および複合照会では、QuerySpec および CompoundQuerySpec メソッドを介して並べ替えがサポートされています。
QuerySpec.appendOrderBy(OrderBy a_orderBy, int[] a_fromIndicies)
CompoundQuerySpec.appendOrderBy(OrderBy a_orderBy)
QuerySpec メソッドを使用して、QuerySpec の FROM 節に対して OrderByColumnExpression を検証します。CompoundQuerySpec メソッドは検証しません。これらのメソッドは、どちらもステートメントの SELECT 節に ColumnExpression を追加する処理を行いません。この処理は appendSelect() メソッドによって行う必要があります。どちらの場合でも、OrderBy の各 ColumnExpression にコラムエイリアスを設定してください。照会のタイプと関連するサブクラスの番号によって、コラムエイリアスを使用しない場合は実際の SQL ステートメントが無効になる場合があります。コラムエイリアスには、SQL によって使用される単語 (例 : number) を使用しないでください。
以下の例では、並べ替えによる複合照会を構築します。名前によって並べ替えられた部品とドキュメントの名前が返されます。以下に、この照会の SQL を示します。
SELECT A0.bname sortName
FROM WTPart A0
UNION
SELECT A0.bname sortName
FROM WTDocument A0
ORDER BY sortName DESC
以下のコードで、照会の仕様を作成します。最初のコンポーネントの照会は部品です。コラムエイリアスの設定に注意してください。
String sortName = "sortName";
QuerySpec partQuery = new QuerySpec();
int classIndex = partQuery.appendClassList(wt.part.WTPart.class, false);
ClassAttribute partName = new ClassAttribute(wt.part.WTPart.class,
wt.part.WTPart.NAME);
partName.setColumnAlias(sortName);
partQuery.appendSelect(partName, new int[] { classIndex }, false);
以下のセクションでは、照会のドキュメント部分を作成します。同じコラムエイリアスを使用します。
QuerySpec docQuery = new QuerySpec();
classIndex = docQuery.appendClassList(wt.doc.WTDocument.class, false);
ClassAttribute docName =
new ClassAttribute(wt.doc.WTDocument.class, wt.doc.WTDocument.NAME);
docName.setColumnAlias(sortName);
docQuery.appendSelect(docName, new int[] { classIndex }, false);
最後に、これら 2 つのコンポーネント照会を使用して複合照会が作成されます。照会全体に OrderBy が追加されます。デフォルトのロケールを使用して、ユーザーの言語に応じて名前を並べ替えます。
CompoundQuerySpec query = new CompoundQuerySpec();
query.setSetOperator(SetOperator.UNION);
query.addComponent(partQuery);
query.addComponent(docQuery);
query.appendOrderBy(new OrderBy(partName, true
));