[ |../../index.htm#lansa/select.htm]
現在地:

7.107 SELECT

注: 利用オプション
SELECTコマンドは、ENDSELECTコマンドと対で使用して、ファイル内で特定の条件に一致した1つ以上のレコードを処理するための「ループ」を作成するために使用します。
SELECT/ENDSELECTループの例を以下に示します。
 -->SELECT  FIELDS(#ORDLIN #PRODUCT #QUANTITY)  |       FROM_FILE(ORDLIN) WITH_KEY(#ORDER) |     |    DISPLAY FIELDS(#ORDER #ORDLIN #PRODUCT #QUANTITY) |      ---ENDSELECT  
これにより、ファイルORDLINから、受注番号がフィールド#ORDERの値に一致しているすべてのレコードを読み取るループが作成されます。
レコードが読み取られるたびに、SELECT/ENDSELECTループ内に定義されたDISPLAYコマンドによって、そのレコードの明細が表示されます。
SELECTコマンドは、LANSA RDMLで最も柔軟なコマンドでしょう。このコマンドを最大限に活用するには、ある程度の経験が必要です。このコマンドでサポートされるデータベース処理のタイプの例を以下に示します。

また、SELECTコマンドを、IBM i オペレーティング・システム・コマンドOPNQRYF (オープン・クエリー・ファイル)と組み合わせて使用することもできます。この場合、SELECTコマンドの機能が拡張され、以下の操作が可能になります。

IBM i オペレーティング・システム・コマンドOPNQRYFの使用方法の詳細については、まずこのガイドに記載されているOPENコマンドのセクションを参照してください。
回避すべきSELECTループ・ロジック
以下のように、SELECTループでフィールドA、B、およびCが選択される場合について考えます。
SELECT FIELDS(#A #B #C)  FROM_FILE(...)          WHERE(...............)  .......  .......  ENDSELECT  
このループ内では、これらのフィールド値は予測可能で、すべてのプラットフォームに渡って一定です。
ただし、ループ外では、フィールド値は予測不可能で一定になりません。そこで、以下のように指定します。
SELECT FIELDS(#A #B #C) FROM_FILE(...)  .......  IF COND(#A < 35.5)  .......  ENDIF  .......  ENDSELECT  
上記の例は、予測可能なロジックです。一方、以下のように指定したとします。
SELECT FIELDS(#A #B #C)  FROM_FILE(...)          WHERE(...............)  .......  .......  ENDSELECT IF COND(#A < 35.5)  .......  ENDIF  
このロジックは、その形式やバリエーションに関係なく予測不可能です。
A (BおよびC)の値は、選択テーブルから読み取られたデータであるという観点から、実際にはSELECTループの終了後に「未定義」として定義されます。すなわち、SELECT/ENDSELECTループ終了時におけるこれらのフィールド値は予測不可能で、プラットフォームに渡って一定ではありません。

移植性に関する考慮事項

パラメータFROM_FILE GENERIC LOCK 、およびOPTIONS を参照してください。

参照
7.107.1 SELECT のパラメータ
7.107.2 SELECT についてのコメント/警告
7.107.3 SELECT の使用例
                                                         必須
 
  SELECT ------ FIELDS ----- フィールド名  フィールド属性 -->
                                |           |               | |
                                |            -- 最大7 ----  |
                                |*ALL                         |
                                |*ALL_REAL                    |
                                |*ALL_VIRT                    |
                                |*INCLUDING                   |
                                |*EXCLUDING                   |
                                |拡張可能なグループ             |
                                |                             |
                                |------ RDMLXの場合は最大1000 --|
                                 ------- RDMLの場合は最大100 ----
 
             >- FROM_FILE -- ファイル名 . *FIRST ------------>
                                            ライブラリ名
 
 -----------------------------------------------------------------
                                                         任意指定
             >- WHERE ------ '条件' ------------------->
 
             >- WITH_KEY --- キー・フィールド値 -------------->
                               拡張可能なグループ式
 
             >- NBR_KEYS --- *WITHKEY ---------------------->
                                *COMPUTE
                                数値フィールド名
 
             >- GENERIC ---- *NO --------------------------->
                                *YES
 
             >- IO_STATUS -- *STATUS ----------------------->
                                フィールド名
 
             >- IO_ERROR --- *ABORT ------------------------>
                                *NEXT
                                *RETURN 
                                ラベル
 
             >- VAL_ERROR -- *LASTDIS ---------------------->
                                *NEXT
                                *RETURN
                                ラベル
 
             >- END_FILE --- *NEXT ------------------------->
                                *RETURN
                                ラベル
 
             >- ISSUE_MSG -- *NO --------------------------->
                                *YES
 
             >- LOCK ------- *NO --------------------------->
                                *YES
 
             >- RETURN_RRN - *NONE ------------------------->
                                フィールド名
 
             >- OPTIONS --- 最大5個のオプションを指定可能 --------|
 
                                *BACKWARDS
                                *STARTKEY
                                *ENDWHERE
                                *ENDWHERESQL
                                *BLOCKnnn
 
[ |../../index.htm#lansa/select.htm]