EGL open 文は、後で get next 文を使用して検索するために、リレーショナル・データベースから一連の行を選択します。
open 文は、カーソルまたは呼び出されたプロシージャー上で
作動できます。
- resultSetID
- open 文を、後の get next、replace、delete、および close 文に結びつける ID。 詳細については、『resultSetID』を参照してください。
- scroll
結果セット内をさまざまな方法で移動できるオプション。
get next 文は常時使用できますが、
scroll を使用すると、以下の文も使用できます。
- get absolute
- get current
- get first
- get last
- get previous
- get relative
scroll オプションを使用できるのは、Java™ で出力を生成している場合だけです。
- hold
- コミットが発生したときに、結果セット内の位置を維持します。hold オプションを Java プログラムに使用できるのは、JDBC ドライバーが JDBC 3.0 以上をサポートしている場合だけです。COBOL プログラムの場合はオプションが使用可能です。しかし、CICS® をターゲットにしたプログラムがセグメント化されている場合、セグメント化されたプログラム中の会話により CICS トランザクションが終了され、プログラムによるファイルまたはデータベース位置の保存が妨げられるため、hold オプションはほとんど意味を持ちません。
hold オプションは、
次の場合に適切です。
- ストアード・プロシージャーではなく、カーソルをオープンするために EGL open 文を使用している場合。
- 結果セット中の位置を失うことなく、定期的に変更内容をコミットする場合。
- 使用しているデータベース管理システムが、SQL カーソル宣言で WITH HOLD オプションの使用をサポートしている場合。
例えば、コードは以下のように機能します。
- EGL open 文を実行し、カーソルを宣言してオープンする。
- EGL get next 文を実行して、1 つの行を取り出す。
- ループの中で以下の操作を行う。
- 何らかの方法でデータを処理する。
- EGL replace 文を実行して、行を更新する。
- system 関数 sysLib.commit を実行し、変更内容をコミットする。
- EGL get next 文を実行して、別の行を取り出す。
hold を指定しない場合は、カーソルが開いていないためにステップ 3 の d の最初の実行は失敗します。
hold を指定するカーソルはコミット時には閉じられませんが、ロールバックまたはデータベース接続ではすべてのカーソルが閉じられます。
コミットを通じてカーソル位置を保存する必要がない場合は、hold を指定しないでください。
- forUpdate
- データベースから検索されたデータを置換または削除するために以降の EGL 文を使用することができるオプション
結果セットを検索するためにストアード・プロシージャーを
呼び出している場合は、forUpdate を指定できません。
- usingKeys ... item
- 暗黙の SQL 文の WHERE 文節のキー値コンポーネントを作成するために使用する
キー項目のリストを識別します。暗黙の SQL 文は、
明示的な SQL 文を指定しない場合に実行時に使用されます。
usingKeys 文節を指定しない場合、
暗黙の文のキー値コンポーネントは open 文で参照される
SQL レコード・パーツが基となります。
明示的な SQL 文を指定する場合、usingKeys 情報は無視されます。
- with #sql{ sqlStatement }
- 明示的な SQL SELECT 文。SQL レコードを指定した場合はオプションです。#sql と左中括弧の間にスペースを入れないでください。
- into ... item
- カーソルまたはストアード・プロシージャーから値を受け取る
EGL ホスト変数を識別する INTO 文節です。 #sql{ } ブロックの外側にある、このような文節では、ホスト変数名の前にセミコロンを含めないでください。
- with preparedStatementID
- 実行時に SQL SELECT または CALL 文を準備する
EGL prepare 文の ID。open 文により、SQL SELECT
または CALL 文が動的に実行されます。 詳細については、『prepare』を参照してください。
- using ... item
- 実行時に準備済み SQL SELECT または CALL 文で使用可能になる
EGL ホスト変数を識別する USING 文節です。 #sql{ } ブロックの外側にある、このような文節では、ホスト変数名の前にセミコロンを含めないでください。
- SQL record name
- SQLRecord 型のレコードの名前。レコード名または sqlStatement
に対する値のどちらかが必要です。sqlStatement が省略されると、
SQL SELECT 文は SQL レコードから引き出されます。
以下に例を示します (SQL レコードにより emp が呼び出されたと想定)。
open empSetId forUpdate for emp;
open x1 with
#sql{
select empnum, empname, empphone
from employee
where empnum >= :empnum
for update of empname, empphone
}
open x2 with
#sql{
select empname, empphone
from employee
where empnum = :empnum
}
for emp;
open x3 with
#sql{
call aResultSetStoredProc(:argumentItem)
}