クラスへのクエリの追加
Caché クラスには、クエリ定義が含まれます。各クエリでは、クエリ・インタフェースのインスタンスを定義します。一連のメソッドを Caché %ResultSetOpens in a new tab オブジェクトから呼び出すことができるため、一連のデータに対して処理を繰り返すことができるようになります。
以下の方法で、クエリを使用します。
-
サーバ・ベースのメソッド内で、%ResultSetOpens in a new tab クラスを使用する方法
-
Caché Java バインディングに含まれる Java ResultSet クラスを使用する方法
-
Caché ActiveX バインディングに含まれる ActiveX ResultSet クラスを使用する方法
-
ODBC、または JDBC ストアド・プロシージャとして使用する方法 (クエリを SQL ストアド・プロシージャとして投影するように指定した場合)
クエリには、以下の 2 種類があります。
-
SQL 文を基にしたクエリ (%SQLQueryOpens in a new tab クラスを使用) と
-
ユーザ記述コードを基にしたクエリ (%QueryOpens in a new tab クラスを使用) です。
%SQLQueryOpens in a new tab クラスは、クエリ・インタフェースの実装を自動的に提供します。%QueryOpens in a new tab クラスは提供しません。このクエリ定義はクエリ・インタフェースを提供するだけです。実際のクエリ機能を実装するためには、メソッドを記述する必要があります。
新規のクエリをクラス定義に追加するには、以下の 2 つの方法があります。
-
クラス・エディタを使用して、クラス定義を編集する方法
-
新規クエリ・ウィザードを使用する方法
クラス・エディタを使用してクエリを追加するには、クラス・エディタの空の行にカーソルを配置し、クエリ宣言を入力します。
Class MyApp.Person Extends %Persistent
{
Property Name As %String;
/// This query provides a list of persons ordered by Name.
Query ByName(ByVal name As %String) As %SQLQuery(CONTAINID = 1)
{
SELECT ID,Name FROM Person
WHERE (Name %STARTSWITH :name)
ORDER BY Name
}
}
また、既存のクエリ宣言をコピーして貼り付け、それを編集することもできます。
クエリの概要は、"Caché オブジェクトの使用法" の "クラス・クエリ" の章を参照してください。クエリ定義の詳細は、"Caché クラス定義リファレンス" のリファレンス “クラス定義” にある “クラス定義” を参照してください。
新規クエリ・ウィザード
新規クエリ・ウィザードを使用して、新規クエリをクラス定義に追加できます。[クラス]→[追加]→[クエリ] を使用して、新規クエリ・ウィザードを開きます。クラス・インスペクタで右クリックして [新規クエリ] を選択するか、ツールバーから [新規クエリ] アイコン を選択することもできます。
[完了] ボタンはいつでも選択できます。指定していない情報に対しては既定値が設定されます。
名前、実装、および説明ページ
新規クエリ・ウィザードでは、以下の情報の入力が促されます (これらの値は後で変更できます)。
(必須) 新規クエリの名前。これは、有効なクエリ名である必要があります。また、定義済みの既存のクエリと同じ名前を付けることはできません。
名前に関する説明は、"Caché オブジェクトの使用法" の "Caché クラス" の章を参照してください。
(必須) これが SQL 文を基にしたクエリ (ウィザードで生成されたクエリ) であるか、ユーザ記述のコードを基にしたクエリ (ユーザが自らクエリ実装のコードを記述したクエリ) であるかを指定します。
(オプション) 新規クエリに関する説明。この説明は、クラス・ドキュメントがオンライン・クラス・ライブラリ・ドキュメントで表示されるときに使用されます。
説明には、HTML フォーマット・タグを記述することもできます。詳細は、"Caché オブジェクトの使用法" の “クラスの定義とコンパイル” の章の “クラス・ドキュメントでの HTML マークアップの使用” を参照してください。
入力パラメータ・ページ
クエリは、入力パラメータ (引数) を取ります (入力パラメータを必要としないこともあります)。
これらのパラメータの名前、タイプ、既定値、およびデータの値渡し方法を指定できます。引数は、表形式で表示されます。テーブルにある [追加] アイコン を使用して、引数リストに新規の項目を追加することができます。このアイコンをクリックすると、ポップアップ・ダイアログが表示され、引数の名前、そのタイプ、オプションの既定値を指定できます。上矢印 と下矢印 を使用すると、リスト内の項目の順序を並べ替えることができます。
列ページ
SQL ベースのクエリでは、結果セットに含める (または、生成された SQL クエリの SELECT 句によって) オブジェクト・プロパティ (列) を指定する必要があります。
クエリに列を追加するには、利用できるプロパティリストの左側から項目を選択し、[>] ボタンを使用してその項目を右側のリストに移動します。
条件ページ
SQL ベースのクエリでは、結果セットを制限する (または、生成された SQL クエリの SQL WHERE 句によって) 条件を指定できます。
条件を設定するには、一連のコンボ・ボックスから値を選択します。[表現] ボックスには、表現 (リテラル値など) やクエリ引数 (: コロン文字で始まる SQL ホスト変数など) を指定できます。
照合順ページ
SQL ベースのクエリでは、結果セットの並べ替え (生成された SQL クエリの SQL ORDER BY 句) に使用する列を指定できます。
行指定形式ページ
ユーザ記述のクエリでは、クエリによって返される列の名前やタイプを指定する必要があります。
SQL ベースのクエリの場合、ウィザードではこの情報の入力は促されません。クラス・コンパイラが、SQL クエリを検証することで決定できるためです。
新規クエリ・ウィザード実行の結果
新規クエリ・ウィザードを実行した後、クラス・エディタ・ウィンドウは更新され、新規のクエリ定義が表示されます。以下に例を示します。
/// This is a Person class
class MyApp.Person extends %Persistent
{
Query ByName(ByVal name As %String) As %SQLQuery(CONTAINID = 1)
{
SELECT ID,Name FROM Person
WHERE (Name %STARTSWITH :name)
ORDER BY Name
}
}
このクエリをさらに変更する場合は、クラス・エディタ、またはクラス・インスペクタを使用します。
ユーザ記述のクエリを指定した場合、クラス・エディタには新規のクエリ定義と、実装しようとしているクエリ・メソッドのスケルトンの両方が追加されます。
Class MyApp.Person Extends %Persistent
{
// ...
ClassMethod MyQueryClose(
ByRef qHandle As %Binary
) As %Status [ PlaceAfter = MyQueryExecute ]
{
Quit $$$OK
}
ClassMethod MyQueryExecute(
ByRef qHandle As %Binary,
ByVal aaa As %Library.String
) As %Status
{
Quit $$$OK
}
ClassMethod MyQueryFetch(
ByRef qHandle As %Binary,
ByRef Row As %List,
ByRef AtEnd As %Integer = 0
) As %Status [ PlaceAfter = MyQueryExecute ]
{
Quit $$$OK
}
Query MyQuery(
ByVal aaa As %Library.String
) As %Query(ROWSPEC = "C1,C2")
{
}
}