S9 コマンド(ISN リストのソート)

このドキュメントでは、次のトピックについて説明します。


機能および使用

S9 コマンドは、先の Sx コマンドを使って作成した ISN リストをソートしたり、ユーザーの与えた ISN リストをソートしたりするのに使用します。

ソートには 2 つのタイプがあります。

  • ISN 値の順(ISN の昇順)

  • ユーザー指定のディスクリプタの値(複数可)の順。ソート順の制御用に、1~4 個のディスクリプタを指定できます。昇順、降順のどちらかを指定できます。

ソートする ISN リストは、Adabas 一時ワークスペースファイルに格納されるか、または ISNバッファに提供されます。

実行結果の ISN リストは、ISN バッファに入ります。

graphics/s9.png

S9 Command, Procedure Flow

コントロールブロック

Field フォーマット  
コールタイプ B F/U
予約(内部使用)   -/-
コマンドコード A F/U
コマンド ID B F/U
File Number B F/U (1)
Response Code B F/A (1)
ISN B -/A
ISN 下限 B F/U
ISN 数 B F/A
ISN バッファ長(ACB のみ) B F/U
コマンドオプション 1 A F/U
コマンドオプション 2 A F/U
アディション 1 A F/U
アディション 2 A、B -/A
アディション 3 A F/A
アディション 4 A F/A
コマンドタイム B -/A
ユーザーエリア   F/U

バッファエリア

バッファ  
フォーマットバッファ *
レコードバッファ *
サーチバッファ *
バリューバッファ *
ISN バッファ F/A
フォーマット:
A 英数字
B 2 進数
x/y Adabasコール前/後 - xとyは、値を取ることができます。
A Adabas によって設定
F ユーザーによって設定
U Adabas コール後も変更なし
- 使用しません
* 使用せず。ただし、コールステートメントのパラメータリストに含まれていなければならない。

(1)このフィールドの意味は、Call タイプに指定された値によって異なります。詳細については、「Adabas の呼び出し」の「コントロールブロック」を参照してください。

コントロールブロック

コマンドコード

S9

コマンド ID

このフィールドに空白やゼロ以外の値を設定しても構いません。

コマンド ID の自動生成を使用するとき以外、このフィールドの上位バイトを 16 進数の FF に設定しないでください(詳細については、「プログラミングの考慮事項」の「コマンド ID の使用」を参照)。

このフィールドの上位バイトには 16 進数 FF をセットしないでください。

File Number

ソートする ISN リストの作成元となったファイルの番号を示します。

Response Code

このフィールドには、コマンドに対するレスポンスコードが返されます。レスポンスコード 0 は、このコマンドが正しく実行されたことを示します。

ISN

このフィールドには、ISN 結果リストの先頭 ISN が返されます。実行結果の ISN リストがない場合、このフィールドは変更されません。これは最初のコールでも、その後の Adabas 一時ワークスペースから ISN を取得するためのコールでも同様です。

ISN 下限

このフィールドは、指定する ISN より大きい ISN だけを ISN リストに入れるために、最初の S9 コールで用います。このフィールドをゼロに設定すると、該当するすべての ISN が返されます。

また、このフィールドは、Adabas 一時ワークスペースに保存された ISN リストから ISN グループを取得するときにも使用します。詳細については、「プログラミングの考慮事項」の「ISN リストの読み込み」を参照してください。

ISN 数

Adabas はこのフィールドに、最初の S9 コールの結果として実行結果の ISN リストに入るレコード数を返します。

また、Adabas 一時ワークスペースから ISN を取得するための後続の S9 コールの結果として、Adabas は ISN バッファに格納した ISN の数を返します。

ソートする ISN リストが ISN バッファで提供されている場合、このフィールドにはソートする ISN の数が含まれている必要があります。ISN バッファで提供されている ISN の数よりも大きい値を指定した場合、その値は、提供されている ISN の数まで減らされます。

ISN バッファ長(ACB のみ)

ISN バッファ長(バイト単位)を示します。この長さによって ISN バッファに配置される ISN の数が決定します。

このフィールドをゼロにすると、ISN は ISN バッファに追加されません。L1/L4 コマンドの GET NEXT オプションを指定して ISN 結果リストを読み込む場合、または条件に合ったレコード数を求めるためだけにコマンドを発行する場合、このフィールドはゼロにする必要があります。

ゼロ以外の値を指定する場合は、4 の倍数にする必要があります。それ以外の場合、長さには 4 の倍数で次に小さい整数が設定されます。

ソートすべき ISN を ISN バッファに入れる場合は、このフィールドが、ソートする ISN の数の 4 倍かそれ以上でなければなりません。

コマンドオプション 1

このフィールドを H にすると、SAVE ISN LIST オプションを呼び出します。このオプションを使用すると、Adabas は実行結果の ISN リスト全体を Adabas 一時ワークスペースに格納します。

このフィールドの "S" は、ISN リストがソート済みであることを ADABAS に伝えます。"S" オプションには、SAVE ISN LIST オプションが含まれています。"S" オプションを指定したにもかかわらず、ISN リストがソートされていない場合、レスポンスコード 24 が返されます。"S" オプションは、ISN リストが ISN バッファに供給されている場合のみ使用できます。アディション 4 は空白に設定する必要があります。

コマンドオプション 2

このフィールドは、降順オプションを呼びだすのに使用します。このフィールドを D とすると、ISN リストを降順にソートします。降順オプションは、ISN 値でソートするときは指定できません。

コマンドオプション 1/2

いずれかのフィールドが I であるときは、コマンド実行中に行う最初の処理として、コマンド ID フィールドに指定されている CID 値を解放します。

アディション 1

値が ISNbbbbb であるときは、ソート順に ISN 値を使用します。

ソート順を制御する使用ディスクリプタをこのフィールドに指定します。

1 個から 4 個までのディスクリプタを指定できます。ディスクリプタまたはそれ以外のフィールド名は使用できますが、ピリオディックグループのフィールドは使用できません。ハイパーディスクリプタも指定できますが、ディスクリプタでないフィールド名と組み合わせることはできません。フォネティックディスクリプタは指定しないでください。サブディスクリプタおよびスーパーディスクリプタは、PEグループのフィールドでない場合に指定できます。マルチプルバリューフィールドは使用できます。このとき、レコード内の最高値に応じて ISN がソートされます。

ディスクリプタは、バイト 1 から開始して(左詰めで)指定し、残りの桁は空白(以下の例では "b")に設定する必要があります。

例:

  XXYYbbbb
   XX = major sort descriptor
   YY = minor sort descriptor

非ディスクリプタフィールドを使用し、FDT の標準長がゼロ以外の場合、非ディスクリプタフィールドの値すべてが、FDT の標準長以内に収まる必要があります。そうでない場合はレスポンス 1 が返されることがあります。

NU オプションで定義され、空値を含むディスクリプタをソート順として使用した場合、ソートされたリストの先頭に空値が表示されます。

例:

Sorted list with NU option     :  0, -1, +1
                                  
Sorted list without NU option  :  -1, 0, +1

値が ISNbbbbb であるときは、ソート順に ISN 値を使用します。

このフィールドには、ソート順の制御に使用するディスクリプタを指定することもできます。

1~3 個のディスクリプタを指定できます。サブディスクリプタおよびスーパーディスクリプタは、PEグループのフィールドでない場合に指定できます。フォネティックディスクリプタまたはピリオディックグループ内のディスクリプタは指定できません。マルチプルバリューフィールドは使用できます。このとき、レコード内の最高値に応じて ISN がソートされます。

ディスクリプタは、バイト 1 から開始して(左詰めで)指定し、残りの桁は空白にする必要があります。

例:

  XXYYbbbb
   XX = major sort descriptor
   YY = minor sort descriptor

ソートできる ISN の数は、DBA が設定した SORT ワークエリアのサイズに依存します。限度を超過すると、ソートは行われず、レスポンスコード 1 が返されます。ISN は昇順で返されます。ISN 結果リストの異なるディスクリプタ値の個数は、65535 に制限されます。

NU オプションで定義され、空値を含むディスクリプタをソート順として使用した場合、ソートされたリストの先頭に空値が表示されます。

例:

       Sorted list
   with NU option:  0, –1, +1
           format: unpacked
   without NU option:  –1, 0, +1
アディション 2

このフィールドには、一部のレスポンスコードについて詳細情報が返されます。詳細については、『Adabas メッセージおよびコードマニュアル』を参照してください。

アディション 3

セキュリティ保護のためのパスワードを指定します。

使用するファイルがセキュリティ保護されていない場合、このフィールドは空白にしておきます。ファイルがセキュリティ保護されている場合は、ユーザーは該当するパスワードを指定する必要があります。

指定したパスワードを保護するため、このフィールドはコマンド処理時に空白にセットされます。

アディション 4

Adabas 一時ワークスペース内の ISN リストをソートする場合は、このフィールドの最初の 4 バイトに、リスト格納時のコマンド ID を指定する必要があります。

ソートする ISN リストが ISN バッファにある場合は、このフィールドを空白にセットしなければなりません。

ISN バッファ

ユーザーは、ソートする ISN リストをこのバッファに指定することもできます。ソートする ISN をこのバッファに入れる場合は、初めにソートするすべての ISN が充分入るだけの大きさでなければなりません。

このバッファには、ISN 結果リストが格納されます。各 ISN は 4 バイトの 2 進数で返されます。

ISN バッファ長がゼロでなく、ISN バッファが実行結果の ISN を全部格納するのに充分な大きさではなく、しかも空白でないコマンド ID を使用した場合は、Adabas はオーバーフローした ISN を Adabas 一時ワークスペースに格納します。その後、同一コマンド ID の S9 コールを使って、この ISN を取り出すことができます。詳細については、「プログラミングの考慮事項」の「ISN リスト処理」を参照してください。

例 1:

ISN バッファ内の ISN リストを ISN 順でソートします。622 個の ISN をソートします。

コントロールブロック:

Command Code          S9
Command ID            S901 (a non blank, non zero command ID is
                            required)
File Number           1  (the  ISN list to be sorted is derived
                          from file 1)
ISN Quantity          622 (622 ISNs are to be sorted)
ISN Lower Limit       0 (all ISNs are to be selected)
ISN Buffer Length     2488 (or larger) (each ISN  to be  sorted
                                        requires 4 bytes)
Command Option 1      H (the Save ISN List option is to be used)
Command Option 2      b (ascending sequence is to be used)
Additions 1           ISNbbbbb (the ISN values are  to be  used
                                as the sorting sequence)
Additions 3           bbbbbbbb (file is not security protected)
Additions 4           bbbbbbbb  (the ISN  list  to be sorted is
                                 contained in the ISN Buffer)

バッファエリア:

ISN Buffer            The ISNs to be  sorted  are  provided  in
                      this buffer. Each ISN must be provided as
                      a four byte binary number.

例 2:

Adabas 一時ワークスペースに格納された ISN リストをソートします。ISN リストを格納するためのコマンド ID は U066 です。主および副シーケンスフィールドとしてディスクリプタ AA および AB を使ってリストをソートします。降順ソートを使用します。

コントロールブロック:

Command Code          S9
Command ID            S902 (a non blank command ID is required)
File Number           1 (the ISN list was derived from file 1)
ISN Lower Limit       0 (All ISNs are to be selected)
ISN Buffer Length     0 (no ISNs are to be returned in the  ISN
                      Buffer)
Command Option 1      H (the Save ISN List option is to be used)
Command Option 2      D (the descending option is to be used)
Additions 1           AAABbbbb  (AA  is to be used as the major
                                 sequence field; AB is to be  used  as the
                                 minor sequence field)
Additions 3           bbbbbbbb (file is not security protected)
Additions 4           U066bbbb (the  ISN  list  to be sorted is
                                stored  on the Adabas temporary working
                                space under the command ID U066)