Page History
[ |../../index.htm#lansa/select.htm]
現在地:
...
7.107 SELECT
| Note |
|---|
...
注意:利用オプション |
SELECTコマンドは、ENDSELECTコマンドと対で使用して、ファイル内で特定の条件に一致した1つ以上のレコードを処理するための「ループ」を作成するために使用します。 SELECTコマンドは、ENDSELECTコマンドと対で使用して、ファイル内で特定の条件に一致した1つ以上のレコードを処理するための「ループ」を作成するために使用します。
SELECT/ENDSELECTループの例を以下に示します。
ENDSELECTループの例を以下に示します。
---
...
>SELECT FIELDS(#ORDLIN #PRODUCT #QUANTITY)
| FROM_FILE(ORDLIN)
...
WITH_KEY(#ORDER)
...
|
| DISPLAY FIELDS(#ORDER #ORDLIN #PRODUCT #QUANTITY)
|
----ENDSELECT
...
これにより、ファイルORDLINから、受注番号がフィールド#ORDERの値に一致しているすべてのレコードを読み取るループが作成されます。 これにより、ファイルORDLINから、受注番号がフィールド#ORDERの値に一致しているすべてのレコードを読み取るループが作成されます。
レコードが読み取られるたびに、SELECT/ENDSELECTループ内に定義されたDISPLAYコマンドによって、そのレコードの明細が表示されます。 ENDSELECTループ内に定義されたDISPLAYコマンドによって、そのレコードの明細が表示されます。
SELECTコマンドは、LANSA RDMLで最も柔軟なコマンドでしょう。このコマンドを最大限に活用するには、ある程度の経験が必要です。このコマンドでサポートされるデータベース処理のタイプの例を以下に示します。
...
IBM i オペレーティング・システム・コマンドOPNQRYFの使用方法の詳細については、まずこのガイドに記載されているOPENコマンドのセクションを参照してください。 回避すべきSELECTループ・ロジック
回避すべきSELECTループ・ロジック
...
以下のように、SELECTループでフィールドA、B、およびCが選択される場合について考えます。
SELECT FIELDS(#A #B #C)
FROM_FILE(...)
...
WHERE(...............)
...
.......
...
.......
...
ENDSELECT
...
このループ内では、これらのフィールド値は予測可能で、すべてのプラットフォームに渡って一定です。 このループ内では、これらのフィールド値は予測可能で、すべてのプラットフォームに渡って一定です。 ただし、ループ外では、フィールド値は予測不可能で一定になりません。そこで、以下のように指定します。
SELECT FIELDS(#A #B #C) FROM
ただし、ループ外では、フィールド値は予測不可能で一定になりません。そこで、以下のように指定します。
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ループ終了時におけるこれらのフィールド値は予測不可能で、プラットフォームに渡って一定ではありません。
...
次のトピックも参照してください。
| Panel | |
|---|---|
|
...
| |
必須 SELECT ---------- FIELDS -------- |
...
-- フィールド名 フィールド属性 --- |
...
--> |
...
| | | | |
...
RDMLXの場合は最大1000 ----| |
...
------ RDMLの場合は最大100 -- |
...
---- |
...
>-- FROM_FILE -------- ファイル名 . *FIRST ------------------> |
...
ライブラリ名 ----------------------------------------------------------------------------------- |
...
任意指定 >-- WHERE ----------- |
...
'条件' |
...
----------------------------------->
|
...
>-- WITH_KEY --------- キー・フィールド値 --- |
...
--------------> |
...
拡張可能なグループ式 >-- NBR_KEYS -------- *WITHKEY -----------------------------> |
...
*COMPUTE >-- GENERIC ---------- |
...
*NO ------------------------------------> |
...
*YES |
...
>-- IO_STATUS -------- *STATUS -------------------------------> |
...
フィールド名 >-- IO_ERROR --------- *ABORT -------------------------------> |
...
*NEXT >-- VAL_ERROR ------- *LASTDIS ------------------------------> |
...
*NEXT >-- END_FILE --------- *NEXT ---------------------------------> |
...
*RETURN >-- ISSUE_MSG ------ *NO ------------------------------------> |
...
*YES |
...
>-- LOCK ------------ |
...
*NO ------------------------------------> |
...
*YES |
...
>-- RETURN_RRN --- *NONE ---------------------------------> |
...
フィールド名 >-- OPTIONS ------- 最大5個のオプションを指定可能 --------| |
...
*BACKWARDS |