クエリを作成します。
Synopsis
CREATE QUERY queryname(parameter_list) characteristics language
   code_body
引数
queryname 作成するクエリの名前。 識別子 です。このクエリ名は、修飾されていない場合 (StoreName) または修飾されている場合 (Patient.StoreName) があります。パラメータが指定されない場合でも、queryname の後には括弧を続ける必要があります。
parameter_list オプション — クエリに渡すパラメータのリスト。パラメータのリストは括弧で囲み、パラメータはコンマで区切られます。パラメータが指定されない場合でも、括弧は必須です。
characteristics オプション — クエリの特性を指定する 1 つ以上のキーワード。使用可能なキーワードは、RESULTS、CONTAINID、FOR、FINAL、ROCEDURE、SELECTMODE です。特性は、空白で区切られ、任意の順序で指定できます。
language オプションcode_body に使用されるプログラミング言語を指定するキーワード節。LANGUAGE OBJECTSCRIPT (Caché ObjectScript の場合) または LANGUAGE SQL を指定します。language 節が省略される場合は、SQL が既定です。
code_body
クエリのプログラム・コード
SQL プログラム・コードの開始には BEGIN キーワードが使用され、その終了には END キーワードが使用されます。クエリの code_body は、1 つの完結した SQL 文 (1 つの SELECT 文) のみで構成されます。SELECT 文は、セミコロン (;) で終わります。
Caché ObjectScript プログラム・コードは中括弧で囲まれます。
概要
CREATE QUERY 文は、クラスにクエリを生成します。既定では、MySelect と命名したクエリが、User.queryMySelect または SQLUser.queryMySelect として保存されます。
CREATE QUERY で作成されるクエリは、ストアド・プロシージャとして公開される場合とそうでない場合があります。ストアド・プロシージャとして公開するクエリを生成するには、characteristics の 1 つとして PROCEDURE キーワードを指定する必要があります。CREATE PROCEDURE 文を使用して、ストアド・プロシージャとして公開されるクエリを生成することも可能です。
クエリの生成には、GRANT コマンドで指定された %CREATE_QUERY 管理者特権が必要です。
引数
name
生成するクエリの名前です。この名前には、修飾されていない場合 (StoreName) とクラス名で指定して修飾された場合 (Patient.StoreName) があります。クエリの名前の後には括弧が必要です。
parameter-list
値をクエリに渡すために使用されるパラメータのパラメータ宣言リストです。パラメータのリストは括弧で囲み、リストのパラメータ宣言はコンマで区切られます。パラメータを指定しない場合も括弧は必須です。
リスト内の各パラメータ宣言は、(先頭から順番に) 以下の要素で構成されます。
クエリをストアド・プロシージャとして公開すると (characteristics に PROCEDURE キーワードを指定)、プロシージャ・コンテキスト・ハンドラを使用して、プロシージャとその呼び出し元 (ODBC サーバなど) 間でプロシージャ・コンテキストの相互受け渡しが行われます。このプロシージャ・コンテキスト・ハンドラは、Caché によって (%qHandle:%SQLProcContext として) %sqlcontext オブジェクトを使用して自動生成されます。
以下のようにプロシージャ・コンテキスト・ハンドラは、タイプ %SQLProcContext で最初のパラメータとして明示的に宣言できます。
  INOUT pHandle %SQLProcContext
%SQLProcContext の属性は SQLCode と RowCount です。これらは通常、以下のように SQL 変数 SQLCODE と %ROWCOUNT に設定されます。
  SET pHandle.SQLCode=SQLCODE,pHandle.RowCount=%ROWCOUNT
characteristics
有効な characteristics キーワードは、以下のとおりです。
characteristics キーワード 概要
CONTAINID integer フィールドが存在する場合は、どのフィールドが ID を返すか指定します。 CONTAINID を ID を返すコラムの番号に設定するか、または ID を返す列が存在しない場合は 0 を設定します。 Caché は、名前の付いたフィールドが実際に ID を含むことを認証しないため、非一貫性データでユーザ・エラーが発生します。
FOR classname メソッドを生成するクラス名を指定します。そのクラスが存在しない場合は新規作成します。メソッド名を認証することによりクラス名を指定することもできます。FOR 節で指定されたクラス名の方が、メソッド名の認証により指定されたクラス名よりも優先されます。
FINAL サブクラスがメソッドの上書きを行えないことを指定します。デフォルトでは、メソッドは最終ではありません。FINAL キーワードはサブクラスによって継承されます。
PROCEDURE クエリが SQL ストアド・プロシージャであることを指定します。ストアド・プロシージャはサブクラスに継承されます (このキーワードは PROC と略されます)。
RESULTS result_set
データ・フィールドをクエリで返された別のフィールドへ指定します。各フィールドでは、列名、データ型 (デフォルトで属性に割り当てられたタイプと異なる場合)、そしてオプションとして見出しを指定します。これらフィールドの特性はコロンで区切ります。result_set 内の異なるフィールドは、コンマで区切ります。
LANGUAGE SQL の場合、クエリが SELECT * でない限り RESULTS キーワードを省略できます。RESULTS キーワードを省略する場合、ROWSPEC はクラス・コンパイル中に自動生成します。
SELECTMODE mode クエリをコンパイルするために使用するモードを指定します。可能な値は、LOGICAL、ODBC、RUNTIME、DISPLAY です。デフォルトは RUNTIME です。
SELECTMODE 節は、データを返すモードを指定します。mode 値が LOGICAL の場合は、論理 (内部保存) 値が返されます。例えば、日付は $HOROLOG 形式で返されます。mode 値が ODBC の場合、論理と ODBC 間の変換が適用され、ODBC 形式値が返されます。mode 値が DISPLAY の場合、論理と表示間の変換が適用され、表示形式値が返されます。mode 値が RUNTIME の場合、ローカル変数 %Runtime を設定して、実行時にモードを LOGICAL、ODBC、DISPLAY のいずれかに設定できます。これは、%Library.ResultSet RuntimeMode プロパティを使用して設定できます。RUNTIME モードの既定は LOGICAL です。
RESULTS 節は、クエリの結果を指定します。RESULTS 節の SQL データ型パラメータが、クエリの ROWSPEC の対応する Caché データ型パラメータに変換されます。例えば、RESULTS 節の RESULTS ( Code VARCHAR(15) ) では、ROWSPEC = “Code:%Library.String(MAXLEN=15)” という ROWSPEC 仕様が生成されます。
language
code_body に使用している言語を指定するキーワード節。使用可能な節は、LANGUAGE OBJECTSCRIPT (Caché ObjectScript の場合) か、LANGUAGE SQL です。LANGUAGE 節が省略される場合、SQL はデフォルトです。
LANGUAGE が SQL の場合、%Library.SQLQuery タイプのクラス・クエリが生成されます。LANGUAGE が OBJECTSCRIPT の場合、%Library.Query タイプのクラス・クエリが生成されます。
code_body
生成されるクエリのプログラム・コード。このコードは SQL または Caché ObjectScript で指定します。使用される言語は LANGUAGE 節と一致する必要があります。しかし、Caché ObjectScript で指定されるコードには組み込み SQL を含むことが可能です。
指定したコードが SQL の場合、1 つの SELECT 文で構成する必要があります。SQL クエリのプログラム・コードは BEGIN キーワードで開始し、その後に実際のプログラム・コード (1 つの SELECT 文) を続ける必要があります。プログラム・コードの末尾にはセミコロン (;) を付け、END キーワードで終了します。
指定したコードが OBJECTSCRIPT の場合、Caché が提供する EXECUTE メソッドと FETCH メソッドの呼び出しを含む必要があります。また、CLOSE、FetchRows、FetchODBC、GetInfo メソッド呼び出しを含むことも可能です。Caché ObjectScript コードは、中括弧で囲まれます。
Caché は、クエリの実際のコードを生成するために提供されたコードを使用します。
以下の例は、PersonState という名前のクエリを作成します。このクエリでは、パラメータは宣言されず、characteristics および language に既定値が使用されます。
  WRITE !,"Creating a query"
  &sql(CREATE QUERY PersonState() BEGIN
       SELECT Name,Home_State FROM Sample.Person ;
       END)
  IF SQLCODE=0 { WRITE !,"Created a query" }
  ELSEIF SQLCODE=-361 { WRITE !,"Query already exists" }
  ELSE { WRITE !,"SQL error: ",SQLCODE }
Caché エクスプローラを起動すると、上記の例で作成したクエリの SQLUser.queryPersonState が SAMPLES データベース・クラス・フォルダにあるのがわかります。上記のプログラム例を再実行する前に、Caché エクスプローラを使用してこのプロシージャを削除できます。もちろん、DROP QUERY を使用してプロシージャを削除できます。
関連項目