7.105 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.105.1 SELECT のパラメータ

7.105.2 SELECT についてのコメント/警告

7.105.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