• 検索結果がありません。

SQL カーソル

ドキュメント内 Caché SQL の使用法 (ページ 67-70)

9.2 構文と使用法

9.2.7 SQL カーソル

複数の行を返すクエリを実行するための埋め込み SQL を使用したい場合は、SQL カーソルを使用 する必要があります。SQL カーソルを使用するには、まず DECLARE で名前を設定します。この名 前は、カーソルの OPEN、FETCH (データの取り出し)、CLOSE の際に使用します。

カーソル名は、クラスまたはルーチンの中で一意である必要があります。また、DECLARE 文は、そ のカーソルを使用する文より 前 のルーチンにある必要があります。

以下の例では、カーソルを使用してクエリを実行し、主デバイスへ結果を表示します。

構文と使用法

&sql(DECLARE C1 CURSOR FOR SELECT %ID,Name

INTO :id, :name FROM Sample.Person ORDER BY Name )

&sql(OPEN C1) &sql(FETCH C1)

While (SQLCODE = 0) {

Write id, ": ", name,!

&sql(FETCH C1) }

&sql(CLOSE C1)

この例は、以下を実行します。

1. これは、カーソル C1 を宣言し、Nameの順に並べられた一連のPerson行を返します。

2. カーソルをオープンします。

3. データの最後に達するまで、カーソルの FETCH を呼び出します。FETCH 呼び出しの後、さら にフェッチするデータがある場合は SQLCODE 変数は 0 に設定されます。FETCH への各呼 び出しの後、返り値は DECLARE 文の INTO 節により指定されたホスト変数にコピーされます。

4. カーソルをクローズします。

9.2.7.1 DECLARE カーソル文

DECLARE 文は、名前と、カーソルを定義する SQL SELECT 文の両方を指定します。例えば、以 下の文は MyCursor と呼ばれるカーソルを宣言します。

&sql(DECLARE MyCursor CURSOR FOR SELECT Name, DOB

FROM Sample.Person

WHERE Home_State = :state ORDER BY Name

)

DECLARE 文は、オプションの INTO 節を含む場合もあります。INTO 節は、カーソルが走査された ときにデータを受け取るローカル・ホスト変数の名前を指定します。例えば、上記の例に INTO 節を 追加すると、以下のようになります。

&sql(DECLARE MyCursor CURSOR FOR SELECT Name, DOB

INTO :name, :dob FROM Sample.Person

WHERE Home_State = :state ORDER BY Name

)

INTO 節のホスト変数の数は、カーソルの SELECT リストの中の列数と正確に一致している必要が あります。一致していない場合、文がコンパイルされたときに “カーディナリティ・ミスマッチ・エラー”

が生成されます。

DECLARE 文に INTO 節が含まれない場合、INTO 節は FETCH 文の中に表す必要があります。

9.2.7.2 OPEN カーソル文

OPEN 文は、カーソルより後の部分を実行するために、カーソルを作成します。

&sql(OPEN MyCursor)

OPEN 呼び出しに成功すると、SQLCODE 変数が 0 に設定されます。

最初に OPEN 呼び出しを実行せずに、カーソルからデータを FETCH することはできません。

カーソルに使用された実際のクエリによっては、OPEN 文はほとんど何も実行しない場合や、クエリ のための初期化作業を実行する場合もあります。

9.2.7.3 FETCH カーソル文

FETCH 文は、(カーソル・クエリで定義されているように) カーソルの次の行のデータをフェッチしま す。

&sql(FETCH MyCursor)

FETCH 呼び出しの前に、カーソルの DECLARE と OPEN を実行する必要があります。

FETCH 文は、INTO 節を含む場合があります。INTO 節は、カーソルが走査されたときにデータを 受け取るローカル・ホスト変数の名前を指定します。例えば、上記の例に INTO 節を追加すると、以 下のようになります。

&sql(FETCH MyCursor INTO :a, :b)

DECLARE 文と FETCH 文の両方に INTO 節が含まれる場合、FETCH 文により指定されたホスト 変数を使用します。

INTO 節のホスト変数の数は、カーソルの SELECT リストの中の列数と正確に一致している必要が あります。一致していない場合、文がコンパイルされたときに “カーディナリティ・ミスマッチ・エラー”

が生成されます。

FETCH の呼び出しに成功すると、SQLCODE 変数は 0 に設定されます。それ以上フェッチする データがない場合は、SQLCODE は 100 に設定されます (これ以上データがないことを意味しま す)。

クエリによっては、最初の FETCH 呼び出しが別のタスク (一時的なデータ構造内の値の並べ替え など) を実行する場合もあります。

9.2.7.4 CLOSE カーソル文

CLOSE 文は、カーソルの実行を終了します。

&sql(CLOSE MyCursor)

構文と使用法

CLOSE 文は、クエリの実行に使用したテンポラリ・ストレージをクリーンアップします。CLOSE 呼び 出しに失敗したプログラムでは、リソース・リークが起こる可能性があります (テンポラリ・データベー スの CACHETEMP の不必要な増加など)。

CLOSE の呼び出しに成功すると、SQLCODE 変数が 0 に設定されます。

ドキュメント内 Caché SQL の使用法 (ページ 67-70)

関連したドキュメント