例3 - クエリーから結果セットを受け取る READ コマンド

このSQLServiceの例では、READコマンドを使用して、クエリーから結果セットを受け取る方法が示されます。READコマンドを使用する場合、SET PARAMETER(*MAP)コマンドを使用してフィールド列のマッピングを設定する必要があります。
この例では、JSMJDBC という IBM i のデータベースに接続します (これは IBM i の例であるため、データベース名はライブラリ名になります)。
CONNECTコマンドで使用されるドライバー名は、SQLServiceプロパティ・ファイルで定義されるドライバー名とパスに相当します。アクセスするファイルはTBLNAMEとなります。これは、ID、NAME、AGE、SALARY、DEPT、GRADEの各フィールドで構成されます。
この例では以下のステップを行います。
1.      JSMCOMMAND から返されるメッセージを処理するフィールドを定義します;
2.      テーブルのフィールドを結果リストの列にマッピングする場合に使用されるフィールドを定義します。ここで定義されるフィールドは、クエリーが実行されるテーブルで定義されたフィールドの長さとタイプに一致していなければなりません。
3.      フィールド列のマッピングを入れるために使用されるリストに必要な2つのフィールドを定義します。
4.      列マッピングを入れるリストを定義します。これは2つの列のリストにします。このリストの最初の列には列番号が入り、2番目のフィールドには列名が入ります。
5.      ステップ 2 で定義したフィールドを使って、2 つの作業リストを定義します。これらのリストは、READ コマンドを使って、クエリにより作成された結果リストから読み込まれます。この例では、2つの列を使って、必要に応じて結果リストに戻りながら、異なる列にアクセスする方法が示されています。2つの参照リストはこれらの作業リストと同じ形式で定義され、この参照リストを使用して画面に結果が表示されます。作業リストのENTRYS値の意味については、ポイント9を参照してください。
6.      次にJSMを開始し、SQLServiceをロードして、データベース・ドライバーに接続します。
7.      列フィールドのマッピングを定義します。定義するには、#FIELDを適切な列に、#COLUMNを(テーブルの)適切なフィールド名に設定します。各マッピングは、#MAPLST作業リストに新しいエントリーとして追加され、SET PARAMETER(*MAP)コマンドが発行されます。SERVICE_LISTはこのコマンドの一部として渡され、ここで定義するフィールドは、マッピング・リストで使用されるフィールドになります。マッピング・リストは、JSMコマンドのTO_GET部分でも指定する必要があります。
8.      コマンドを実行 (EXECUTE) します。この例ではプリペアド・ステートメントは使用されませんが、EXECUTEコマンドに直接入力されます。このJSMコマンドでは作業リストは提供されないことに注意してください。EXECUTE QUERYの場合、通常、作業リストは結果リストを入れるために用意されますが、この場合、代わりにREADコマンドを選択して結果リストにアクセスします。
9.      次に、READ コマンドを発行して結果セットのデータにアクセスします。この例では、異なる列にアクセスするたびにこの操作が2回行われます。この例で実証される機能は、作業リストに入るよりも大きな結果リストがある状況で特に役立ちます。そのため、READで列数を減らすと、管理可能なチャンク単位でデータにアクセスできます。最初のREADにはキーワードSCROLL(*NO)があります。このため、2番目のREADでは、最初のREADで選択された同じレコードの列を選択できます。2番目のREADにはキーワードSCROLL(*YES)があります。このキーワードでは、次のDOWHILEループが開始すると、最初のREADが次のレコード・セットで開始します。各READで読み込まれるレコードの数は、作業リストのサイズによって異なります。この例では、100 - NB ENTRYS(100)に設定されています。READコマンドにはSERVICE_LISTがあります。このキーワードで指定されたフィールドは、JSMコマンドのTO_GET部分に指定された作業リストで定義されたフィールドと同じでなければなりません。
10.     結果の表示後に、サービスとの接続を解除してJSMを閉じます。