EGL get 文は、単一ファイル・レコードまたはデータベース行を検索し、コード内で後で格納されたデータを置換または削除することができるオプションを提供します。また、このステートメントを使用してデータベース行の集合を検索し、それぞれの後続の行を動的配列の次の SQL レコードに入れることができます。
get 文は、get by key value として識別されることがあり、get ワードで始まるその他の文とは区別されます。
リソースがリカバリー可能である場合 (VSAM ファイルまたは SQL データベースのケースのように)、レコードは forUpdate オプションによってロックされるため、コミットが発生するまで他のプログラムから変更することはできません。コミット処理の詳細については『作業論理単位』を参照してください。
このような文節 (#sql{ } ブロックの外側にある) では、ホスト変数名の前にセミコロンを含めないでください。
usingKeys 文節を指定しない場合、暗黙のステートメントのキー値コンポーネントは get ステートメントで参照される SQL レコード・パーツに基づくか、get ステートメントで参照される 動的配列の基礎になります。
動的配列の場合、usingKeys 文節の項目 (または SQL レコードのホスト変数) は、 動的配列の基礎である SQL レコードに存在しない必要があります。
明示的な SQL ステートメントを指定する場合、usingKeys 情報は無視されます。
emp.empnum = 1; // sets the key in record emp try get emp forUpdate; onException myErrorHandler(8); // プログラムを終了する end emp.empname = emp.empname + " Smith"; try replace emp; onException myErrorHandler(12); end
try get emp singleRow into empname with #sql{ select empname from Employee where empnum = :empnum }; onException myErrorHandler(8); end
try get emp forUpdate into empname with #sql{ select empname from Employee where empnum = :empnum }; onException myErrorHandler(8); // プログラムを終了する end emp.empname = emp.empname + " Smith"; try replace emp; onException myErrorHandler(12); end
get 文の詳細は、レコード・タイプによって異なります。SQL 処理の詳細については、『SQL レコード』を参照してください。
索引付きレコードに対して get 文を発行するときは、 レコードのキー値によって、ファイルから検索されるレコードが決定されます。
ファイルが VSAM ファイルである場合、EGL get 文 (forUpdate オプション指定) の間、他のプログラムからこのレコードを変更することはできません。z/OS® バッチ・プログラムでは、コミットが発生するまでロックが続き、コミットがジョブ・ステップの終わりまで発生しないこともあります。iSeries™ COBOL プログラムでは、コミットが発生するまでロックが続き、『実行単位』で説明したとおり、コミットが実行単位の終わりまで発生しないこともあります。
EGL get ステートメントにより、生成されるコード内で SQL SELECT ステートメントが作成されます。singleRow オプションを指定する場合、SQL SELECT ステートメントは、 スタンドアロン・ステートメントです。または、SQL SELECT ステートメントは、 『SQL サポート』で説明するようにカーソル内の文節です。
get ステートメントに SQL レコードを入出力オブジェクトとして指定するが、 明示的な SQL ステートメントを指定しない場合、暗黙の SQL SELECT は以下の特性を持ちます。
SELECT column01, column02, ... columnNN FROM tableName WHERE keyColumn01 = :keyItem01 FOR UPDATE OF column01, column02, ... columnNN
INTO :recordItem01, :recordItem02, ... :recordItemNN
EGL では、INTO 文節を指定しないと、SQL レコードが明示的な SQL SELECT ステートメントを伴わない場合、SQL INTO 文節が派生されます。派生した INTO 文節の項目は、SQL ステートメントの SELECT 文節にリストされた列と関連づけられた項目です。(項目と列の関連付けは、 『SQL 項目プロパティー』に記載されているように SQL レコード・パーツに指定されます。) 列が項目と関連付けられていない場合は、EGL INTO 文節が必要です。
keyColumn01 >= :keyItem01 & keyColumn02 >= :keyItem02 & . . . keyColumnN >= :keyItemN
関連するタスク
EGL ステートメントおよびコマンドの構文図