アプリケーション・プログラミング

本章では、OpenFrame NDBアプリケーション・プログラミングの構造、実行環境の定義、コマンドの使用方法について説明します。

1. 概要

NDBアプリケーションは、NDBが提供する機能を使用してNDBに情報を保存するか、保存された情報を処理するプログラムです。アプリケーションは、さまざまなプログラミング言語を使用して作成することができます。ただし、NDBが提供する機能を使用する方法は言語に応じて異なります。本章では、COBOL言語を使用してNDBアプリケーションを作成する方法についてのみ説明します。

さまざまなプログラミング言語を使用してNDBアプリケーションを作成できるため、ある言語で作成できれば、他の言語でも容易に作成できます。

以下は、NDBの入出力(I/O)操作のためのコマンドです。

  • NDBマクロ制御コマンド

    データベースの情報を直接操作するコマンドではなく、アプリケーションでNDBを使用する区間の開始と終了を示すためのコマンドです。

    コマンド 説明

    READY

    仮想データベースをオープンして、アプリケーションで指定された仮想データベースを使用するために必要な環境を準備します。

    FINISH

    仮想データベースをクローズします。

  • データ操作コマンド(DML: Database Manipulation Language)

    データベースの情報を操作するためのコマンドです。

    コマンド 説明

    CONNECT

    データベースに保存されているレコードを指定されたセットに接続します。

    DISCONNECT

    DISCONNECTコマンドを使用して、レコードとセットの接続を切断します。

    ERASE

    データベースからレコードを削除します。

    GET/FIND

    データベースに保存されているレコードを検索します。

    MODIFY

    データベースに保存されているレコードの内容を変更します。

    STORE

    データベースに1つのレコードを保存します。

2. NDBアプリケーションの構造

NDBは、基本的にクライアントとサーバーで構成されます。NDBアプリケーションはクライアント・プロセスとして動作し、NDBクライアント・ライブラリを使用してNDBサーバーにデータベースを操作するためのコマンドを要求します。

以下の図は、NDBアプリケーションの動作環境を示しています。

figure 3 5
NDBアプリケーション・プログラムの環境

NDBアプリケーションでユーザーが作成する最も重要な部分は、データベースを操作するためのNDBコマンドを含むアプリケーション・ロジックです。そのほか、データベースにレコードを保存するか、データベースから検索したレコードを保存するためのユーザー作業領域(User Work Area)、また、データベースにコマンドを要求してコマンドの実行結果などの情報を共有するための通信領域(Communication Area)などがアプリケーションに含まれる必要があります。

2.1. ユーザー作業領域

ユーザー作業領域は、データベースとアプリケーション間のレコードI/Oのためのメモリ上の領域です。アプリケーションがデータベースにレコードを保存する場合、ユーザー作業領域に保存されたレコードがデータベースに保存されます。ただし、アプリケーションがデータベースからレコードを検索する場合、検索されたレコードはユーザー作業領域に保存されます。ユーザー作業領域は、アプリケーションが使用するサブスキーマに含まれた各レコード型ごとに割り当てられる必要があります。

2.2. 通信領域

通信領域は、FCOM(File Management Communication Area)とも呼ばれます。データベースとアプリケーション間の通信のために、以下のような形式の情報を持つメモリ領域です。

以下は、COBOL言語で記述されたFCOMの形式です。

01   FCOM.
    02   FILLER     PIC X  (16).
    02   VDBNAME    PIC X  (8).
    02   RDNAME     PIC X  (12).
    02   MCRCD      PIC S9 (4)  COMP.
    02   MCRCTL     PIC S9 (4)  COMP.
    02   FILLER     PIC S9 (4)  COMP.
    02   SETCNT     PIC S9 (4)  COMP.
    02   FILLER     PIC S9 (4)  COMP.
    02   DBESCB.
      03   MCRTYP    PIC XX.
      03   DBSCB     PIC 99.
      03   DBECB     PIC 99.
    02   FILLER     PIC S9 (4)  COMP.
    02   PAGENO     PIC S9 (9)  COMP.
    02   FILLER     PIC S9 (4)  COMP.
    02   SNAPCTL    PIC S9 (4)  COMP.
    02   FILLER     PIC X  (8).
    02   TRNCTR     PIC S9 (9)  COMP.
    02   PGCS       PIC X  (8).
    02   PGCSRN     PIC X  (12).
    02   SETTYP   OCCURS 3   TIMES.
      03   STNAME    PIC X(12).
      03   SETCTL.
        04   ARRAYNO   PIC S9  (4)  COMP.

以下は、FCOMの主要フィールドについての説明です。

  • VDBNAME

    アプリケーションが開放して使用している仮想データベース(virtual database、subschema)の名前がVDBNAMEフィールドに保存されます。アプリケーションは、VDBNAMEフィールド値を参照することは可能ですが、変更はできません。

  • RDNAME

    DMLコマンドに指定されたレコード名がRDNAMEフィールドに保存され、データベースに渡されます。アプリケーションは、RDNAMEフィールド値を参照することは可能ですが、変更はできません。

    PGCSRNフィールドに保存されたレコード名は、データベースがコマンドを実行した結果に変更されるか、検索したレコード名が設定されます。RDNAMEフィールドには、ユーザーが要求したコマンドに指定されたレコード名が保存されます。したがって、コマンドの実行中にエラーが発生し、PGCSRNが設定されなかった場合でも、RDNAMEフィールドにはユーザーがコマンドに指定したレコード名がそのまま残ります。

  • MCRCTL

    データベース操作コマンドに指定されたオプションの種類を示すコード値がMCRCTLフィールドに設定されます。

    制御コード(16進) コマンド 説明

    0000

    FIND/GET

    レコードの順次検索、階層関係を利用

    CONNECT

    レコードをすべてのセットに接続

    DISCONNECT

    すべてのセットからレコードの接続を解除

    ERASE

    指定されたレコードのみ削除

    STORE

    レコードを保存するのみ

    0001

    FIND/GET

    レコードの順次検索、階層関係を利用、逆方向

    CONNECT

    レコードをすべてのセットに接続、レコード名を指定

    DISCONNECT

    すべてのセットからレコードの接続を解除、レコード名を指定

    ERASE

    指定されたオーナー・レコードと他のオーナー・レコードに属していないすべてのメンバー・レコードを削除

    STORE

    レコードを保存、関連しているすべてのセットに接続

    0002

    FIND/GET

    レコードの順次検索、階層関係を利用、オーナー・レコードを検索

    CONNECT

    オーナー・レコードを関連しているすべてのセットに接続

    DISCONNECT

    関連しているすべてのセットからオーナー・レコードの接続を解除

    0003

    FIND/GET

    直接検索、リスト構造セット

    CONNECT

    レコードを指定されたセットに接続

    DISCONNECT

    指定されたセットからレコードの接続を解除

    ERASE

    関連しているすべてのレコードを削除

    STORE

    レコードを保存、指定されたセットに接続

    0010

    FIND/GET

    直接検索、索引またはランダム・レコードキーを使用

    0011

    直接検索、拡張索引を使用(補助キー使用)

    0012

    重複キーのレコードを検索、索引あるいはランダム・レコードキーを使用

    0013

    重複キーのレコードを検索、拡張索引を使用(補助キー使用)

    0020

    FIND/GET

    最小の索引レコードを検索、レンジ

    0021

    最小の索引レコードを検索、サブレンジ

    0022

    最小の拡張索引レコードを検索、レンジ

    0023

    最小の拡張索引レコードを検索、サブレンジ

    0024

    順次検索、索引レコード、レンジ

    0025

    順次検索、索引レコード、サブレンジ

    0026

    順次検索、拡張索引レコード、レンジ

    0027

    順次検索、拡張索引レコード、サブレンジ

    0028

    最大の拡張索引レコードを検索、レンジ

    0029

    最大の拡張索引レコードを検索、サブレンジ

    002A

    逆順検索、拡張索引レコード、レンジ

    002B

    逆順検索、拡張索引レコード、サブレンジ

    0030

    FIND/GET

    レンジの最初のレコードを検索

    0031

    サブレンジの最初のレコードを検索

    0032

    指定されたレンジの最終検索レコードを検索

    0033

    指定されたサブレンジの最終検索レコードを検索

    0034

    指定されたレンジで順次検索

    0035

    指定されたサブレンジで順次検索

    0036

    最終検索された位置で指定されたレンジを順次検索

    0037

    最終検索された位置で指定されたサブレンジを順次検索

    0040

    FIND/GET

    (PGCS)アドレスを指定して直接検索

  • MCRTYP

    ユーザーがデータベース・コマンドを実行すると、データベースは要求されたコマンドに該当するコマンド・コードをこのフィールドに設定します。エラーまたは例外が発生した場合は、MCRTYPフィールドの値をチェックして、原因となるコマンドを確認することがができます。(サイズ: 2バイト、データ型: 文字)

    コマンド・コード データベース操作コマンド

    CN

    CONNECT

    DC

    DISCONNECT

    ER

    ERASE

    FD

    FIND

    FN

    FINISH

    GT

    GET

    MD

    MODIFY

    RD

    READY

    ST

    STORE

  • DBSCB, DBECB

    データベース操作コマンドの実行中に例外が発生すると、DBSCBとDBECBフィールドを介してアプリケーションに渡されます。発生した例外に応じてDBSCBとDBECBにそれぞれ2バイトの数字で定義されたコードが設定されます。DBSCBとDBECBフィールドをまとめてDBESCBといいます。

    エラーまたは例外が発生せず、コマンドが正常に実行された場合は、DBSCBとDBECBフィールドには両方とも「00」が設定されます。例外またはエラーが発生した場合、アプリケーションはDBSCBとDBECBに設定された値に従って適切に対応できるようにプログラムされる必要があります。

    各例外のDBSCBとDBECBに設定されるコードと詳細については、エラーコードを参照してください。

  • PAGENO

    PAGENOフィールドは、論理ページ番号を引数として使用するデータベース操作コマンドを実行する際、入力値として使用されます。論理ページ番号は、ユーザー・ランダム・エントリ・レコードの検索または保存するときに使用されます。

  • PGCS

    PGCS(Program Current Status)は、アプリケーションで最後に処理されたレコードが保存されているアドレス値を持っています。データベース操作コマンドを実行すると、データベースはPGCSの値がコマンドの対象となるレコードを指すように更新します。このPGCS値を使用して、以降同じレコードを検索することができます。また、PGCSの値は、CONNECTまたはDISCONNECTコマンドの対象レコードを保存するための引数として使用されます。

    PGCSが指すレコードは、トランザクションが終了またはキャンセルされた場合、他のアプリケーションによって削除されることがあります。トランザクションが終了またはキャンセルされる前に、PGCS値を「0」に設定してこのような状況を回避することができます。特定のレコードを指すPGCS値は、1つのアプリケーションで保存され、再使用されるのが一般的です。ただし、PGCS値の保存と再使用が異なるアプリケーションで行われる場合、アプリケーションはPGCS値が正しいかどうかを確認する必要があります。

  • PGCSRN

    PGCSRN(Program Current Status Record Name)フィールドは、PGCSフィールドが指すレコードの名前を持ちます。

  • Others

    FCOMの他のフィールドは、NDBアプリケーションを処理する言語ハンドラー内で使用されるか、データベースとアプリケーション間の内部用として使用されます。このようなフィールドは、ユーザー・プログラムで参照または変更することはできません。

3. データベース操作エラー対策

アプリケーションによって要求されたデータベース操作コマンドの実行結果は、FCOM通信領域のDBSCBとDBECBフィールドを介して返されます。アプリケーションは、DBSCBとDBECBの値をチェックし、発生した例外ごとに対処することができます。

以下は、例外に応じた深刻度を示しています。

DBSCB DBECB イベント 意味

=0

=0

Normal

正常に実行されました。

!=0

=0

Minor exception

アプリケーションは注意および警告に対処する必要があります。

!=0

!=0

Moderate exception

エラーが発生したが、適切な措置を取ると、プログラムは続行されます。

=0

!=0

Sever exception

深刻なエラーが発生したため、トランザクションが取り消されました。

以下の図では、アプリケーションでデータベース操作コマンドの実行後の例外処理方法を示しています。

figure 3 2
プロセッシング結果の例外を処理するためのフローチャート

上記の図で、(1)、(2)、(3)に該当する処理ルーチンはアプリケーションの目的に合わせてユーザーが作成することができます。DBSCBおよびDBESCBの値に従って、ユーザーが作成した例外の処理ルーチンがデータベースによって呼び出されます。

以下は、COBOLで作成されたNDBアプリケーションの例外処理方法についての例です。COBOL言語では、データベース操作の例外を処理するために、USE FOR DB-EXCEPTION文、USE FOR DEAD-LOCK文、IF DB-EXCEPTIONコマンドを提供しています。

...
PROCEDURE   DIVISION.
DECLARATIVES.
DB-ERR-RTN  SECTION.
    USE FOR DB-EXCEPTION.
AAA.
    IF DBSCB=00 GO TO AAA-1.
    TRANSACTION CANCEL.
AAA-1.
    DISPLAY 'DBSCB=' DBSCB  'DBECB=' DBECB.
AAA-EXIT.
    EXIT.
DEAD-LOCK-RTN SECTION.
    USE FOR DEAD-LOCK.
BBB.
    DISPLAY 'DEAD-LOCK OCCURRED - PGCS=' PGCS 'PGCSRN=' PGCSRN ...
BBB-EXIT.
    EXIT.
END DECLARATIVES.
...
TRANSACTION-POINT.
    TRANSACTION END.
    TRANSACTION START.
...
    MOVE 100 TO ENTRY-REC-KEY.
    GET ANY 'AREC'
    IF DB-EXCEPTION IS 13 GO TO NO-REC.
...
NO-REC.
    STORE 'A'.
...

以下は、NDBアプリケーションで例外を処理するために使用される文とコマンドについての説明です。

項目 説明

USE FOR DB-EXCEPTION

例外処理ルーチンをCOBOLプログラムPROCEDURE DIVISIONのDECLARATIVESとEND DECLARATIVES文の間にUSE FOR DB-EXCEPTION属性を持つセクションで作成します。

IF DB-EXCEPTION

IF DB-EXCEPTION文を使用してminorエラーおよびmoderateエラーが発生したかどうかを確認することができます。つまり、IF DB-EXCEPTION文が満たされる場合、DBSCBフィールド値はゼロ以外の値で設定されています。

すべてのデータベース操作コマンドの後に、IF DB-EXCEPTION文を使用して正常に処理されたことを確認し、例外を適切に処理します。

USE FOR DEAD-LOCK

デッドロックは深刻な例外であり、DBSCB=00、DBECB=88がFCOM通信領域に返されます。デッドロックが発生するとトランザクションは自動で取り消され、ユーザーがUSE FOR DEAD-LOCKとして定義した例外処理ルーチンが呼び出されます。デッドロックの例外処理ルーチンが定義されていない状態でデッドロックが発生すると、アプリケーションは異常終了されます。

4. アプリケーション実行環境の定義

NDBアプリケーションが実行される環境は、ADL PEDコマンドによって定義されます。

PEDコマンドの次の構文を使用して、アプリケーションの実行環境を制御することができます。これは、アプリケーションのパフォーマンスおよびセキュリティの面で重要な役割をします。

4.1. ACCESS MODE

アプリケーションがデータベース操作コマンドを要求すると、データベースはPEDコマンドに指定されたアクセス・モードに従って、アプリケーションによるデータベースへのアクセスを排他的に制御します。

以下は、PEDに指定できるアクセス・モードです。

アクセス・モード 説明

READ-ONLY(RO)

データベースに対する検索のみ許可する場合に設定します。

ROアクセス・モードが設定されると、アプリケーションはFINDおよびGETコマンドのみ使用できます。排他的なデータベースへのアクセス制御およびトランザクション管理が不要なアプリケーションの場合にのみ指定します。

EXCLUSIVE-READ(ER)

データベースに対する検索のみ許可する場合に設定します。

ERアクセス・モードが設定されると、アプリケーションはFINDおよびGETコマンドのみ使用できます。また、特定のアプリケーションが検索するデータレコードを他のアプリケーションがデータ構造を変更せずに内容のみ更新している場合は、排他的なアクセス制御なしで同時に検索されます。ただし、データ構造を変更するコマンドでは排他的なアクセス制御が実行されます。

NDBでは、FINDおよびGETコマンドのみ許可されるという点を除けば、UPDATEと同様な排他的なアクセス制御が実行されます。

COMPLETELY EXCLUSIVE-READ(CER)

データベースに対する検索のみ許可する場合に設定します。

CERアクセス・モードが設定されると、アプリケーションはFINDおよびGETコマンドのみ使用できます。また、特定のアプリケーションが検索するデータレコードを、他のアプリケーションがデータ構造の変更の有無に関係なく変更している場合は、排他的なアクセス制御が実行されます。

NDBでは、FINDおよびGETコマンドのみ許可されるという点を除けば、UPDATEと同様な排他的なアクセス制御が実行されます。

MODIFY(MD)

データベースに対する検索と更新を許可する場合に設定します。

MDアクセス・モードが設定されると、アプリケーションはFIND、GET、MODIFYコマンドのみ使用できます。データベースに保存されたデータ構造を変更せずにレコードの内容のみ更新する場合に指定可能であり、データの整合性を保証します。

また、データ構造を変更せずに更新中のレコードに、ROとER以外のアクセス・モードを使用する他のアプリケーションがアクセスしようとする場合は、排他的なアクセス制御が実行されます。

NDBでは、FIND、GET、MODIFYコマンドのみ許可されるという点を除けば、UPDATEと同様な排他的なアクセス制御が実行されます。

UPDATE(UP)

データベースに対するすべてのコマンドを許可する場合に設定します。

UPアクセス・モードが設定されると、アプリケーションはFIND、GET、MODIFY、ERASE、CONNECT、DISCONNECT、STOREコマンドをすべて使用できます。データベースに保存されたデータ構造の変更を伴うコマンドを実行した場合に指定する必要があります。データの整合性を保証します。

UPアクセス・モードのアプリケーションが処理中のレコードを、ROアクセス・モード以外のモードを使用する他のアプリケーションがアクセスしようとする場合は、排他的なアクセス制御が実行されます。

CREATE(CR)

データベースを作成するアプリケーションに対して設定します。

以下は、NDBで複数のアプリケーションが1つのデータに同時にアクセスする場合、各アプリケーションのアクセス・モードに応じて、同じデータに同時にアクセスできる場合と、そうでない場合を示しています。

Access mode for the first program

Access mode for the second program

RO

ER

CER

MD

UP

CR

RO

O

O

O

O

O

O

ER

O

O

O

O

X

X

CER

O

O

O

X

X

X

MD

O

O

X

X

X

X

UP

O

X

X

X

X

X

CR

O

X

X

X

X

X

  • 凡例

    区分 説明

    O

    2つのプログラムから同じデータに同時にアクセスできる。

    X

    2つのプログラムから同じデータに同時にアクセスできない。

4.2. BUFFER

アプリケーションは、データベースにアクセスするために次の3つのバッファーを定義する必要があります。

  • ページ・バッファー(Page Buffer、未サポート)

  • 索引バッファー(Index Buffer、未サポート)

  • 拡張索引バッファー(Extended Index Buffer、未サポート)

各バッファーのサイズと数は、PEDコマンドを使用してアプリケーションごとに定義することができます。PEDコマンドにバッファーを定義する構文が省略された場合は、データベースに正常にアクセスするための最小限のバッファーが使用されます。

富士通AIM/DBと違って、NDBではレコード単位でI/Oを実行しており、バッファーは使用されません。したがって、索引および拡張索引のためのバッファーが使用されないため、バッファーのサイズと数を定義するためのPEDコマンドのPAGE BUFFER、INDEX BUFFER句、- EXTENDED BUFFER句なども無視されます。

バッファーの存在の有無は、データベースの機能ではなく実装手法上の問題です。つまり、NDBでは、機能の面でこの3つのバッファーがなくても、富士通AIM/DBと同じ機能を提供することができます。

4.3. EXCLUSION/INCLUSION SCHEMA

PEDコマンドのINCLUSION SCHEMA文とEXCLUSION SCHEMA文を使用してアプリケーションが使用する仮想データベースに含まれているスキーマのうち、一部を使用するように選択できます。つまり、各アプリケーションごとに使用されるスキーマを制限することができます。

アプリケーションと関連しているPEDコマンドにこの構文が指定されていない場合、アプリケーションは仮想データベースに含まれているすべてのスキーマを使用することができます。そのため、管理者はアプリケーションが使用しないデータベース・スキーマを独自で管理することができます。アプリケーションが使用しているスキーマに該当するデータベースに対しては、データベース・スキーマの属性を変更または再編成することができません。

以下の図では、サブスキーマSUBAに含まれているスキーマのうち、アプリケーションがスキーマS1のみ使用できるように制限しています。

figure 3 3
INCLUSION SCHEMAの例

4.4. EXCLUSION/INCLUSION SUBRANGE

PEDコマンドのINCLUSION SUBRANGE文とEXCLUSIONN SUBRANGE文を使用して、アプリケーションが使用する仮想データベースに含まれているサブレンジのうち、一部のサブレンジを使用するように選択できます。つまり、アプリケーションごとに使用できるサブレンジを制限することができます。

アプリケーションと関連しているPEDコマンドにこの構文が指定されていない場合、アプリケーションは仮想データベースに含まれているすべてのサブレンジを使用することができます。そのため、管理者はアプリケーションが使用しないサブレンジを独自で管理することができます。アプリケーションが使用しているサブレンジに対しては、当該サブレンジの属性を変更および再編成することができません。

以下の図では、サブスキーマSUBAに含まれているサブレンジのうち、一部のみ使用するように制限しています。特定のサブレンジが使用される場合は、関連する拡張索引サブレンジも同時に使用されます。

figure 3 4
INCLUSION SUBRANGEの例

5. レコード順とデータベースのカレント・ステータス

アプリケーションは、データベースに保存されているレコードを一定の順に従って処理します。レコードの検索順は、検索に使用されるコマンドの種類と指定された引数によって決まります。

順次検索では、検索に使用されるコマンドの種類と引数が決まっている場合は、カレント・ステータスに応じて次に検索されるレコードが決まります。カレント・ステータスには、使用される検索方法、レコード型およびセット型に応じて、現在処理中のレコードの位置が含まれています。

データベースは順次検索の際にカレント・ステータスを利用するため、次に検索するレコードをすぐに把握できます。PGCSを除くカレント・ステータスは、アプリケーションで直接変更することができません。これらは、データベース操作コマンドを実行する際にデータベースによって内部的に管理されます。

以下は、データベースで順次検索に使用されるカレント・ステータスの種類についての説明です。

ステータス 説明

PGCS

アプリケーションのカレント・ステータス(PGCS)は、最後に処理されたレコードのロケーション・アドレスを持ちます。1つのアプリケーションに1つのPGCSが存在します。PGCS値はデータベース操作コマンドの後、FCOM通信領域のPGCSフィールドに返されます。ユーザーは、FCOM通信領域のPGCSフィールドに値を直接設定することができます。

RDCS

レコード型ごとに1つのレコード・カレント・ステータス(Record Type Current Status)が存在します。RDCSは、特定のレコード型のうち、最後に処理されたレコードのロケーション・アドレスを持ちます。

STCS

セット型ごとに1つのセット・カレント・ステータス(Set Type Current Status)が存在します。STCSは、特定のセットに含まれているレコードのうち、最後に処理されたレコードのロケーション・アドレスを持ちます。

IXCS

索引エントリを持つレコード型ごとに索引カレント・ステータス(Index Current Status)が存在します。IXCSは、特定のタイプの索引エントリ・レコードのうち、最後に処理されたレコードのロケーション・アドレスを持ちます。

XICS

拡張索引のタイプごとに1つの拡張索引カレント・ステータス(Extended Index Current Status)が存在します。XICSは、特定の拡張索引によって拡張索引になるレコード型のレコードのうち、最後に処理されたレコードのロケーション・アドレスを持ちます。

RGCS

1つのアプリケーションには、1つのレンジ・カレント・ステータス(Range Current Status)が存在します。RGCSは、最後にアプリケーションで検索されたレコード・ロケーション・アドレスを持ちます。

6. NDBコマンド

本節では、各NDBコマンドの機能とコマンドを作成する方法について説明します。

6.1. READY

仮想データベースをオープンして、アプリケーションで指定された仮想データベースを使用するために必要な環境を準備します。

  • フォーマット

    READY [subschema-name].
    • アプリケーションが使用する仮想データベースの名前をsubschema-nameに指定します。

    • subschema-nameが省略された場合は、アプリケーションの宣言部に指定されたサブスキーマ名が使用されます。

    • subschema-nameが指定された場合は、アプリケーションの宣言部に指定されたサブスキーマ名と一致する必要があります。

  • 規則

    • READY以外の他のデータベース操作コマンド(DML)は、READYの前に実行することができません。

    • READYコマンドで仮想データベースを開放したアプリケーションは、必要なデータベース操作がすべて完了したら、FINISHコマンドを使用して該当の仮想データベースをクローズします。

    • アプリケーションのサブプログラムでは、GETまたはSTOREなどのコマンドを使用して、READYまたはFINISHコマンドを使用せずにデータベースにアクセスすることができます。ただし、メインプログラムはREADYまたはFINISHコマンドを呼び出す必要があります。

    • READYコマンドの実行中にエラーが発生すると、アプリケーションは異常終了します。

6.2. FINISH

仮想データベースをクローズします。

  • フォーマット

    FINISH [subschema-name].
    • クローズする仮想データベースの名前をsubschema-nameに指定します。

    • subschema-nameが省略された場合は、アプリケーションの宣言部に指定されたサブスキーマ名が使用されます。

    • subschema-nameが指定された場合は、アプリケーションの宣言部に指定されたサブスキーマ名と一致する必要があります。

  • 規則

    • FINISHコマンドの実行中にエラーが発生すると、アプリケーションは異常終了します。

6.3. CONNECT

データベースに保存されているレコードが指定されたセットに参加できるように接続します。つまり、PGCSが指すレコードをSTCSが指すセットに接続します。

  • フォーマット

    CONNECT [record-name|unique-name-1]
         TO {{{set-name|unique-name-2}
            [NEXT|PRIOR|integer|AT unique-name-3]}...|ALL}.
    • record-nameまたはunique-name-1にPGCSが指すレコード型名を指定します。実際にPGCSが指すレコード型名と一致する必要があります。

    • set-nameまたはunique-name-2にレコードを接続するセット型名を指定します。

    • NEXT、PRIOR、integer、AT unique-name-3のいずれかを指定して、接続されるセットでのレコードの位置を指定します。

    • リスト構造セットに対しては、整数値(integer)または整数変数(AT unique-name-3)を指定することができます。

    • リング構造セットに対しては、NEXTまたはPRIORを指定することができます。unique-name-3は、alphanumeric型または数値型変数です。

      • 英数字型変数であり、リング構造セットの場合は、長さを「1」にする必要があります。

      • 変数に指定可能な値は以下のとおりです。

        区分 説明

        N

        EXTです。

        P

        PRIORです。

        空白(blank)

        空白を指定した場合、システムはユーザーが接続位置を指定しないものとみなします。

      • 数値型変数であり、リスト構造セットの場合は、符号型4桁数字(signed 4-digit number)の整数値を持つ必要があります。(未サポート)

    • TO ALLを指定すると、該当のレコード型がメンバーとして含まれているすべてのセット型のレコードを接続します。(READYに指定されたサブスキーマに定義されているレコードとセット型のうち、該当のレコードをメンバーとして持つすべてのセット型を意味します)

  • 規則

    • record-nameまたはunique-name-1に指定されるレコード型は、READYコマンドを実行する際、指定されたサブスキーマに含まれている必要があります。

    • set-nameまたはunique-name-2に指定されるセット型は、READYコマンドを実行する際、指定されたサブスキーマに含まれている必要があります。

    • record-nameまたはunique-name-1に指定されるレコード型はスキーマに定義されている必要があり、そのレコード型は、set-nameまたはunique-name-2に指定されたセットのメンバー・レコードとして定義されている必要があります。

    • 指定されたレコードは、指定されたセットのSTCSが指す位置に接続されるため、CONNECTコマンドの前に、そのセットのSTCSが設定されている必要があります。

    • 指定されたレコードは以下の位置に接続されます。

      • リング構造セットに対して、NEXTまたはPRIORが指定された場合の接続位置は、STCSが指す位置の直後または直前の位置です。CONNECTコマンドにNEXTまたはPRIORを使用して指定した接続位置は、スキーマに定義されたFIRST、LAST、NEXT、PRIORなどによる接続位置の指定より優先されます。

      • リスト構造セットに対して整数値が指定された場合は、指定された整数値に該当する位置が接続位置になります。

      • unique-name-3が数値型変数の場合は、上記の整数値が指定された場合と同様に処理されます。

    • TO ALLが指定された場合を含め、接続位置が省略された場合は、セットの構造に応じて接続位置が決まります。リング構造の場合は、スキーマのSET subentryのINSERTION句に定義された接続位置になります。リスト構造の場合は、STCSが指す位置が接続位置です。

6.4. DISCONNECT

DISCONNECTコマンドを使用して、レコードとセットの接続を切断します。

  • フォーマット

    DISCONNECT [record-name|unique-name-1]
          FROM {{set-name|unique-name-2}...|ALL}.
    • PGCSが指すレコード型名をrecord-nameまたはunique-name-1を使用して指定します。PGCSが指す実際のレコード型名と一致する必要があります。

    • set-nameまたはunique-name-2にレコードの接続を切断するセット型名を指定します。

    • FROM ALLを指定すると、指定されたレコードを含むすべてのセット型からレコードの接続を切断します。(READYに指定されたサブスキーマに含まれているレコードとセット型のうち、該当のレコードをメンバーとして持つすべてのセット型を意味します)

  • 規則

    • record-nameまたはunique-name-1に指定されたレコード型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • set-nameまたはunique-name-2に指定されたセット型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • record-nameまたはunique-name-1に指定されたレコード型は、スキーマに定義されている必要があります。(該当のレコード型は、set-nameまたはunique-name-2に指定されたセットのメンバー・レコードとして定義されている必要があります)

6.5. ERASE

ERASEコマンドは、データベースからレコードを削除します。セットに含まれている複数のレコードを1度に削除することができます。複数のレコードを削除する場合は、コマンド文に指定された基本削除レコード(deletion base record)と、そのレコードのメンバー・レコードが削除されます。削除対象となるレコードはRDCSによって指されます。

  • フォーマット

    ERASE {record-name|unique-name} [{SELECTIVE|ALL}].
    • 削除するレコードまたは基本削除レコード型名をrecord-nameまたはunique-nameに指定します。record-nameあるいはunique-nameに指定されたレコード型のRDCSが指すレコードが基本削除レコードとなります。

    • 削除されるレコードの範囲は、SELECTIVEまたはALL文の指定によって変わります。

  • 規則

    • record-nameまたはunique-nameに指定されたレコード型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • 削除には、次の3つの方法があります。

      • ALLまたはSELECTIVE文が指定されていない場合は、指定されたレコード型のRDCSが指す基本削除レコードのみ削除されます。

      • SELECTIVE文が指定された場合、基本削除レコードが削除されます。基本削除レコードがメンバー・レコードを持つセットのオーナー・レコードである場合は、他のセットに接続されていないすべてのメンバー・レコードが削除されます。このように削除されるメンバー・レコードが、その下位に他のメンバー・レコードを持つ場合は、他のセットに接続されていない下位のメンバー・レコードもすべて削除されます。

      • ALLが指定された場合、基本削除レコードが削除されます。基本削除レコードがメンバー・レコードを持つセットのオーナー・レコードである場合は、このセットに接続されたすべてのメンバー・レコードが削除されます。削除されたメンバー・レコードがその下位に他のメンバー・レコードを持つ場合は、そのメンバー・レコードの下位のすべてのメンバー・レコードが削除されます。

6.6. GET/FIND

GETとFINDコマンドは、データベースに保存されたレコードを検索するために使用されます。

索引の順次検索、あるいは拡張索引の順次検索の場合、FINDコマンドは検索したレコードの索引キーに該当するデータ項目の値のみをユーザー作業領域に読み込みます。FINDコマンドは、論理的に接続されたレコード(logically concatenation/connected record)は取得しません。GETコマンドは、レコードのすべてのデータ項目および論理的に接続されたレコードを一緒に取得します。

レコードを保存する方法と保存されたレコードにアクセスする方法に応じて、さまざまな検索方法が存在します。

以下は、NDBが提供する検索方法です。

検索方法 説明

Direct retrieval by entry key value

エントリ・キー値を使用して直接検索します。

Indexed entry

索引エントリ・キー値を使用して検索します。

Random entry

ランダム・エントリ・キー値を使用して検索します。

Extended index entry

拡張索引エントリ・キー値を使用して検索します。

Record retrieval with duplicate key values

重複キー値を持つレコードを検索します。

System entry method

システム・セットを使用して検索します。

Set retrieval

セットでの検索方法です。

Sequential retrieval based on STCS

セットでの順次検索です。

Owner retrieval

セットのオーナー・レコードを検索します。

Retrieval by integer

リスト構造セットで整数値を使用して検索します。

Indexed sequential retrieval

索引の順次検索です。

Indexed sequential retrieval

索引の順次検索です。

Extended index sequential retrieval

拡張索引の順次検索です。

Range sequential retrieval

レンジでの検索です。

Non-CRP range sequential retrieval

一般レンジでの順次検索です。

CRP range sequential retrieval

CRPレンジでの順次検索です。

Direct retrieval using PGCS

PGCSによる直接検索

PGCSを使用して直接検索します。

上述した各検索方法については、次の節で詳しく説明します。使用される検索方法は、コマンドの後ろに指定されるオプションおよび構文によって区別されます。

6.6.1. GET/FIND ANY

GET/FIND ANYコマンドは、指定されたエントリ・キーを使用してレコードを直接検索します。

  • フォーマット

    フォーマット1は索引エントリまたはランダム・エントリの検索に、フォーマット2は拡張索引エントリの検索に使用されます。

    • フォーマット1

      エントリ・メソッドを使用しないレコード(non-entry method record)の拡張索引が1次エントリとして定義されておらず、拡張索引による2次エントリが1つのみ定義されている場合は、フォーマット1を拡張索引エントリの検索に使用することができます。

      {GET|FIND} ANY {record-name-1|unique-name-1}.
    • フォーマット2

      {GET|FIND} ANY {record-name-2|unique-name-2|RECORD} WITHIN
      {extended-index-name|unique-name-3} INDEX.
  • 規則

    • 検索する索引エントリ(または、ランダム・エントリ)レコード型名をrecord-name-1、unique-name-1に保存します。

    • フォーマット2を使用する場合は、検索するレコード型名を指定する必要はありません。明示的にレコード型名を指定しない場合は、RECORDと指定します。

    • record-name-2とunique-name-2には、extended-index-nameまたはunique-name-3で指定された拡張索引がインデックスするレコード型名を保存します。

    • 検索に使用する拡張索引の名前をextended-index-nameまたはunique-name-3に指定します。

    • record-name-1、record-name-2、unique-name-1、unique-name-2に指定されたレコード型名は、READY時に指定されたサブスキーマに含まれている必要があります。このコマンドを実行する前に検索するレコードのエントリ・キー値をユーザー領域に設定します。

    • 検索するレコードが保存されているレンジがサブレンジを持っている場合、このコマンドを実行する前にサブレンジを選択するためのロケーション・キー(subrange location key)値を設定します。ただし、拡張索引エントリを検索するときは、拡張索引がサブレンジに分割されている場合でなければ、ロケーション・キー値を設定する必要はありません。

    • ユーザー・ランダム関数を使用する場合は、このコマンドを実行する前にユーザー・ランダム関数の結果値である論理ページ番号をFCOMのPAGENO変数に設定します。

    • extended-index-nameまたはunique-name-3に指定された拡張索引に対し、PEDコマンドのEXTENDEDINDEX BUFFER句にNOT USED属性を指定することができません。

    • 索引エントリまたは拡張索引エントリを検索する際に索引および拡張索引が使用されるため、保存されたレコードに対する索引および拡張索引は検索が行われる前に作成されている必要があります。

    • フォーマット2でextended-index-nameまたはunique-name-3のみ指定されており、レコード名が明示的に指定されていない場合でも、指定された拡張索引がインデックスするレコード型は、READY時に指定されたサブスキーマに含まれている必要があります。

    • SCHEMAコマンドを使用して、レコード型ごとに使用するエントリ方法(索引エントリ、ランダム・エントリ、拡張索引エントリなど)を定義します。

6.6.2. GET/FIND DUPLICATE

GET/FIND DUPLICATEコマンドは、現在の検索位置の次のレコードを検索し、同じエントリ・キー値を持つすべてのレコードを順次検索するために使用されます。

現在の検索位置は、レコードおよび拡張索引のタイプ別に存在するRDCSおよびXICSによって維持されます。このコマンドは、ユーザー作業領域に保存されているエントリ・キー値と、現在の現検索位置の次のレコードのエントリ・キー値が同じである場合、現在の検索位置の次のレコードをユーザー作業領域に読み込みます。

  • フォーマット

    索引エントリまたはランダム・エントリ・レコードを検索する場合はフォーマット1を、拡張索引エントリ・レコードを検索する場合はフォーマット2を使用します。AT END文にプロシージャ名を指定すると、検索するレコードがない場合は、指定されたプロシージャが呼び出されます。

    • フォーマット1

      {GET|FIND} DUPLICATE {record-name-1|unique-name-1}
                [AT END GO TO procedure-name].
    • フォーマット2

      {GET|FIND} DUPLICATE {record-name-2|unique-name-2|RECORD}
                [WITHIN {extended-index-name|unique-name-3} INDEX]
                [AT END GO TO procedure-name].
  • 規則

    • 検索する索引エントリまたはランダム・エントリ・レコード型名をrecord-name-1に指定し、検索する索引エントリまたはランダム・エントリ・レコード型名をunique-name-1に指定します。

    • フォーマット2を使用する場合は、検索するレコード型名を指定する必要がありません。明示的にレコード型名を指定しない場合は、RECORDと指定します。

    • record-name-2にはextended-index-nameまたはunique-name 3で指定された拡張索引がインデックスするレコード型名を指定し、unique-name-2にはextended-index-nameあるいはunique-name-3で指定された拡張索引がインデックスするレコード型名を保存します。

6.6.3. System entry method

システム・エントリ・メソッドは、セット構造を使用してシステム・セットのメンバー・レコードを取得することにより、レコードを検索します。

STCSがシステム・セットに接続されたレコードを指している場合は、システム・エントリ検索を使用してSTCSが指すレコードの直後のレコード(NEXT)または直前(PRIOR)のレコードを検索します。STCSの値が設定されていない場合、システム・エントリ検索はシステム・セットの最初のレコードを検索します。

  • フォーマット

    {GET|FIND} {NEXT|PRIOR} {record-name|RECORD|unique-name-1} WITHIN
              {set-name|unique-name-2}
              [AT END GO TO procedure-name].
    • AT END文にプロシージャ名を指定すると、検索の結果、該当のレコードが存在しない場合(システム・セットにメンバー・レコードが存在しない場合を含む)に指定されたプロシージャが呼び出されます。

  • 規則

    • set-nameまたはunique-name-2に指定されたセットのすべてのメンバー・レコードを、レコード型に関係なく検索するときは、ECORDを指定します。

    • set-nameまたはunique-name-2に指定されたセットのメンバー・レコードの中から、特定のレコード型のレコードのみ検索する場合は、record-nameまたはunique-name-1に検索するレコード型名を指定します。

    • record-nameまたはunique-name-1に指定されたレコード型は、set-nameあるいはunique-name-2に指定されたセットのメンバー・レコード型として定義されている必要があります。

    • record-nameまたはunique-name-1に指定されたレコード型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • set-nameまたはunique-name-2に指定されたセット型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • システム・セットのメンバー・レコードを保存するレンジがサブレンジに分割されている場合は、プログラムで実行される最初のシステム・エントリを検索する前に、サブレンジを選択するためのロケーション・キー値をユーザー作業領域に設定し、そのコマンドを呼び出します。

6.6.4. GET/FIND WITHIN set

GET/FIND WITHINセット・コマンドは、セットのオーナー・レコードとメンバー・レコード間の階層関係の下でレコードを検索します。このコマンドで検索されるレコードは、STCSが指すレコードの直後(NEXTを指定した場合)のレコードか、直前(PRIORを指定した場合)のレコードです。

セットの構造(リング構造またはリスト構造)に関係なく、NEXTまたはPRIORを指定して順次検索を行うことができます。また、システム・セットに対しても使用できます。

システム・エントリ検索コマンドの文法は、このコマンドの文法と同じです。また、システム・エントリで使用されるシステム・セットもセットの一種としてみなすことができます。

  • フォーマット

    {GET|FIND} {NEXT|PRIOR} {record-name|RECORD|unique-name-1} WITHIN
               {set-name|unique-name-2}
               [AT END GO TO procedure-name].
    • AT END文が指定された場合は、次のいずれかの条件を満たすと、指定されたプロシージャが呼び出されます。

      • 検索中のセットの最後(または、最初)のレコードから、NEXT(または、PRIOR)を指定して順次検索する場合

      • 検索されたメンバー・レコードがセットに接続されていない場合

      • 検索されたオーナー・レコードがメンバー・レコードを持っていない場合

  • 規則

    • set-nameまたはunique-name-2に指定されたセットのすべてのメンバー・レコードを、レコード型に関係なく検索するときは、RECORDを指定します。

    • set-nameまたはunique-name-2に指定されたセットのメンバー・レコードの中から特定のレコード型のレコードのみ検索する場合は、record-nameまたはunique-name-1に検索するレコード型名を指定します。

    • record-nameまたはunique-name-1に指定されたレコード型は、set-nameまたはunique-name-2に指定されたセットのメンバー・レコード型として定義されている必要があります。

    • record-nameまたはunique-name-1に指定されたレコード型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • set-nameまたはunique-name-2に指定されたセット型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • このコマンドは、STCSの値を参照するため、エントリ検索コマンドを使用してSTCS値を設定してから、コマンドを呼び出す必要があります。そのため、特定のトランザクションの最初のコマンドとして使用することはできません。この制約は、システム・セットを使用するシステム・エントリ検索コマンドには適用されないため、最初のメンバー・レコードを検索します。

    • 指定されたセットがリング構造の場合は、SCHEMAコマンドのSET副項目のLINKED文にPRIORが指定されていなくても、そのSETに対してこのコマンドを実行するときにPRIORを指定することができます。

    • 指定されたセットがリスト構造であり、record-nameまたはunique-name-1にレコード型名が指定された場合は、指定されたレコード型のレコードが見つかるまで検索が行われます。指定されたレコードが見つからない場合は、セットエンド(set end)が発生し、DBSCB(Database Status Control Block)の値が「11」に設定されます。

6.6.5. GET/FIND OWNER WITHIN set

GET/FIND OWNERコマンドを使用してセットのオーナー・レコードを検索します。セットの構造(リングまたはリスト)に関係なく、セットのオーナー・レコードを取得することができます。また、システム・セット型に対しても実行できます。

  • フォーマット

    {GET|FIND} OWNER WITHIN {set-name|unique-name}
               [AT END GO TO procedure-name].
    • AT END文が指定されており、STCSが指すレコードが指定されたセットに接続されていない場合は、指定されたプロシージャが呼び出されます。

  • 規則

    • set-nameまたはunique-nameに指定されたセット型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • このコマンドは、STCSが指すセットのオーナー・レコードを検索するため、呼び出す前にSTCSが特定のセット上の位置を指している必要があります。このコマンドを実行する前にエントリ検索コマンドを使用してSTCSの値を初期化する必要があるため、特定のトランザクションの最初のコマンドとして使用することはできません。この制約は、システム・セットが対象となる場合は適用されません。特定のシステム・セット型に該当するセットは一意であるためです。

    • SCHEMAコマンドを使用してSETを定義する際、LINKED句にOWNERを指定しなかった場合でも、リング構造セットに対するオーナー・レコードの検索が可能です。

6.6.6. GET/FIND Integer WITHIN set

整数値によるGET/FINDコマンドは、リスト構造セットのメンバー・レコードの中から、指定された整数値の位置に存在するメンバー・レコードを直接検索します。指定の整数値は「1」から始まり、メンバー・レコードの位置順を示します。循環制御のために負の整数値を指定することもできます。

  • フォーマット

    {GET|FIND} {integer|unique-name-1} {record-name|RECORD|unique-name-2} WITHIN
               {set-name|unique-name-3}
               [AT END GO TO procedure-name].
    • AT END文が指定された場合は、次のいずれかの条件を満たすと、指定されたプロシージャが呼び出されます。

      • STCSが指すレコードがオーナー・レコードに接続されていない場合

      • integerまたはunique-name-1に指定された値の位置に接続されたメンバー・レコードが存在しない場合

    • unique-name-1は、符号付き4桁の数値型変数で指定します。(つまり、符号付き2バイト2進項目)

  • 規則

    • record-nameまたはunique-name-2に検索するレコード型を指定します。

    • すべてのレコード型を取得するためには、RECORDを指定します。

    • record-nameまたはunique-name-2に指定されたレコード型は、スキーマに定義されている必要があります。また、そのレコード型は、set-nameまたはunique-name-3に指定されたセットのメンバー・レコードとして定義される必要があります。

    • record-nameまたはunique-name-2に指定されたレコード型は、READYコマンドを実行する際、指定されたサブスキーマに含まれている必要があります。

    • set-nameまたはunique-name-3に指定されたセット型は、READYコマンドを実行する際、指定されたサブスキーマに含まれている必要があります。

    • このコマンドはSTCSの値を参照するため、エントリ検索コマンドを使用してSTCS値を設定してから、コマンドを呼び出す必要があります。したがって、特定のトランザクションの最初のコマンドとして使用することはできません。

    • set-nameまたはunique-name-3に指定されたセット型は、リスト構造である必要があります。

    • integerかunique-name-1に指定された整数値は、次に記述された値よりも大きい値を持つことはできません。

      区分 説明

      仮想セット(virtual set)型の場合

      メンバー・レコードの総数

      軸セット(axis set)型の場合

      検索する方向に該当する軸セット型のメンバー・レコード数

6.6.7. GET/FIND WITHIN INDEX index

GET/FIND FIRST(index)コマンドは、指定されたレンジのレコードの中から最小の索引キー値を持つレコードを検索します。IXCSは参照しません。GET/FIND NEXT(index)コマンドは、現在IXCSが指しているレコードを含む索引リング内から、現在のレコードの次のレコードを検索します。

  • フォーマット

    {GET|FIND} {FIRST|NEXT} {record-name|unique-name} WITHIN INDEX
               [SUBRANGE] [AT END GO TO procedure-name].
    • SUBRANGEが指定された場合は、サブレンジが検索対象となります。指定されていない場合は、レンジ全体が検索対象となります。

    • AT END文が指定された場合は、検索対象領域のすべての索引レコードが検索されます。これ以上検索するレコードがなければ、指定されたプロシージャが呼び出されます。

  • 規則

    • record-nameまたはunique-nameに指定されたレコード型は、SCHEMAコマンドを使用してレコード型を定義する際、索引エントリに指定されたレコード型である必要があります。

    • record-nameまたはunique-nameに指定されたレコード型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • レンジがサブレンジに分割されていない場合は、SUBRANGEを指定することができません。

    • FIRSTとSUBRANGEが指定された場合は、検索するサブレンジを選択するためのロケーション・キーがユーザー作業領域に設定されている必要があります。

    • NEXTコマンドはIXCSを参照するため、事前に設定されている必要があります。また、特定のトランザクションの最初のコマンドとして使用することはできません。

    • レコードが存在しない検索対象領域に対してNEXTを実行すると、AT END例外が発生します。

6.6.8. GET/FIND WITHIN INDEX extended-index(ascending order)

GET/FIND FIRSTおよびNEXT(extended-index)コマンドは、拡張索引キーに対して昇順でレコードを検索します。検索を実行するために拡張索引エントリが使用されます。

  • フォーマット

    {GET|FIND} {FIRST|NEXT} {record-name|unique-name-1|RECORD} WITHIN
               {extended-index-name|unique-name-2} INDEX [SUBRANGE]
               [AT END GO TO procedure-name].
    • SUBRANGEが指定された場合は、拡張索引のサブレンジが検索対象となります。指定されていない場合は、レンジ全体が検索対象となります。

    • AT END文が指定された場合は、検索対象領域のすべてのレコードが検索されます。これ以上検索するレコードがなければ、指定されたプロシージャが呼び出されます。

  • 規則

    • record-nameまたはunique-name-1に指定されたレコード型に対し、SCHEMAコマンドに拡張索引が定義されている必要があります。

    • record-nameまたはunique-name-1に指定されたレコード型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • 検索するレコード型を明示的に指定する必要はありません。この場合、レコード型名の代わりにRECORDと指定されます。

    • record-nameまたはunique-name-1が指定された場合、該当のレコード型は、extended-index-nameまたはunique-name-2に指定された拡張索引を使用してインデックスされる必要があります。

    • レンジがサブレンジに分割されていない場合は、SUBRANGEを指定することができません。

    • FIRSTとSUBRANGE文が両方とも指定された場合は、検索するサブレンジを選択するためのロケーション・キー値がユーザー作業領域に設定されている必要があります。複数のサブレンジが1つの拡張索引サブレンジによってインデックスされる場合は、拡張索引サブレンジに属するサブレンジの中から任意のサブレンジに該当するロケーション・キーを設定します。拡張索引がサブレンジに分割されていない場合は、ロケーション・キー値を設定する必要はありません。

    • NEXTコマンドはIXCSを参照するため、事前に設定されている必要があります。また、特定のトランザクションの最初のコマンドとして使用することはできません。

    • 事前に拡張索引が作成されている必要があります。

    • レコードが存在しない検索対象領域に対してNEXTを実行すると、AT END例外が発生します。AT END例外が発生した直後にPRIORを実行すると、最大の拡張索引キー値に該当するレコードを検索します。

6.6.9. GET/FIND WITHIN INDEX extended-index(descending order)

GET/FIND LASTおよびPRIOR(extended-index)コマンドは、拡張索引キーに対して降順でレコードを検索します。検索の実行には拡張索引エントリが使用されます。

  • フォーマット

    {GET|FIND} {LAST|PRIOR} {record-name|unique-name-1|RECORD} WITHIN
               {extended-index-name|unique-name-2} INDEX [SUBRANGE]
               [AT END GO TO procedure-name].
    • SUBRANGEが指定された場合は、拡張索引のサブレンジが検索対象となります。指定されていない場合は、レンジ全体が検索対象となります。

    • AT END文が指定された場合は、検索対象領域のすべてのレコードが検索されます。これ以上検索するレコードがなければ、指定されたプロシージャが呼び出されます。

  • 規則

    • record-nameまたはunique-name-1に指定されたレコード型に対し、SCHEMAコマンドに拡張索引が定義されている必要があります。

    • record-nameまたはunique-name-1に指定されたレコード型は、READYコマンドを実行する際に指定されたサブレンジに含まれている必要があります。

    • 検索するレコード型を明示的に指定する必要はありません。この場合、レコード型名の代わりにRECORDと指定されます。

    • record-nameまたはunique-name-1が指定された場合、該当のレコード型は、extended-index-nameまたはunique-name-2に指定された拡張索引によってインデックスされる必要があります。

    • レンジがサブレンジに分割されていない場合は、SUBRANGEを指定することができません。

    • LASTとSUBRANGE文が両方とも指定された場合は、検索するサブレンジを選択するためのロケーション・キー値がユーザー作業領域に設定されている必要があります。複数のサブレンジが1つの拡張索引サブレンジによってインデックスされる場合は、拡張索引サブレンジに属するサブレンジの中から任意のサブレンジに該当するロケーション・キーを設定します。拡張索引がサブレンジに分割されていない場合は、ロケーション・キー値を設定する必要はありません。

    • PRIORコマンドはXICSを参照するため、事前に設定されている必要があります。また、特定のトランザクションの最初のコマンドとして使用することはできません。

    • 事前に拡張索引が作成されている必要があります。

    • レコードが存在しない検索対象領域に対してPRIORを実行すると、AT END例外が発生します。AT END例外が発生した直後にNEXTを実行すると、最小の拡張索引キー値に該当するレコードを検索します。

6.6.10. GET/FIND WITHIN range(Non-CRP range)

GET/FIND FIRSTおよびNEXT(Non-CRP range)コマンドは、CRP属性を持たないレンジからレコードを検索します。レコードの検索順序は、レコードがレンジ内に保存された物理的な順序と同じです。

  • フォーマット

    {GET|FIND} {FIRST|NEXT} {record-name|unique-name-1|RECORD} WITHIN
               {range-name|unique-name-2} {RANGE|SUBRANGE}
               [AT END GO TO procedure-name].
    • SUBRANGEが指定された場合は、サブレンジが検索対象となります。

    • RANGEが指定された場合は、レンジ全体が検索対象となります。

    • AT END文が指定された場合は、検索対象領域のすべてのレコードが検索対象となります。これ以上検索するレコードがなければ、指定されたプロシージャが呼び出されます。

  • 規則

    • record-nameまたはunique-nameに指定されたレコード型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • 検索するレコード型を明示的に指定する必要はありません。この場合、レコード型名の代わりにRECORDと指定されます。

    • レンジがサブレンジに分割されていない場合は、SUBRANGEを指定することができません。

    • FIRSTとSUBRANGE文が両方とも指定された場合は、検索するサブレンジを選択するためのロケーション・キー値がユーザー作業領域に設定されている必要があります。

    • NEXTコマンドはRDCSかRGCSを参照するため、事前に設定されている必要があります。た、特定のトランザクションの最初のコマンドとして使用することはできません。

    • レコードが存在しない検索対象領域に対してNEXTを実行すると、AT END例外が発生します。

6.6.11. GET/FIND WITHIN range(CRP range)

GET/FIND FIRSTおよびNEXT(CRP range)コマンドは、CRP属性を持つレンジからレコードを検索します。レコードの検索順序は、レコードの検索順序は、レコードがレンジ内に保存された物理的な順序と同じです。

  • フォーマット

    {GET|FIND} {FIRST|NEXT} {record-name|unique-name-1|RECORD} WITHIN
               {range-name|unique-name-2} {RANGE|SUBRANGE} [USING CRP]
               [AT END GO TO procedure-name].
    • SUBRANGEが指定された場合は、サブレンジが検索対象となります。RANGEが指定された場合は、レンジ全体が検索対象となります。

    • AT END文が指定された場合は、検索対象領域のすべてのレコードが検索されます。これ以上検索するレコードがなければ、指定されたプロシージャが呼び出されます。

    • USING CRP文が指定されると、検索領域を制御する情報であるCRP値が変更されます。指定されていない場合、CRP値は変更されません。

  • 規則

    • record-nameまたはunique-nameに指定されたレコード型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • 検索するレコード型を明示的に指定する必要はありません。この場合、レコード型名の代わりにRECORDと指定されます。

    • レンジがサブレンジに分割されていない場合は、SUBRANGEを指定することができません。

    • FIRSTとSUBRANGE文が両方とも指定された場合は、検索するサブレンジを選択するためのロケーション・キー値がユーザー作業領域に設定されている必要があります。

    • range-nameまたはunique-name-2に指定されたレンジは、SCHEMAコマンドのRANGE項目によってCRP属性を持つように定義されている必要があります。

    • USING CRP文とrecord-nameまたはunique-name-2にレコード型を同時に指定することができます。この場合、指定されたレコード型は、SCHEMAコマンドのRANGE項目の最上位オーナー・レコードとして定義されている必要があります。(range recordまたはrepresentative recordといいます)

    • NEXTコマンドはRDCSまたはRGCSを参照するため、事前に設定されている必要があります。また、特定のトランザクションの最初のコマンドとして使用することはできません。

    • USING CRP文が指定された場合は、RDCSまたはRGCSを参照せずにCRPが指すレコードが検索されます。NEXTが指定されている場合でも、USING CRP文が指定されていると、検索されるレコードはCRPによって決まります。

6.6.12. GET/FIND CURRENT

GET/FIND CURRENTコマンドは、PGCSが指すレコードを検索します。この検索方法はすべてのレコード型およびエントリ手法に対して使用することができます。

GETまたはFINDコマンドを使用してレコードを検索する場合、実際にレコードが保存された物理的な位置を示す値がPGCSに返されます。この値を他の場所に保存しておき、必要に応じてPGCSに設定してからコマンドを実行すると、以前検索したレコードを再検索することができます。

  • フォーマット

    {GET|FIND} CURRENT.
    • PGCSに以前レコードを検索したときの戻り値を設定した後、このコマンドを実行します。

6.7. MODIFY

データベースに保存されたレコードの内容を変更します。指定されたレコード型のRDCSによって指されるレコードの内容が変更されます。

  • フォーマット

    MODIFY {record-name|unique-name}.
    • レコードの内容を変更するレコード型名をrecord-nameまたはunique-nameに指定します。

    • record-nameまたはunique-nameに指定されたレコード型のRDCSが指すレコードの内容が変更されます。

  • 規則

    • record-nameまたはunique-nameに指定されたレコード型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • 索引エントリ・キー、ランダム・エントリ・キー、およびロケーション・キー値は変更できません。

    • 重複するソートキー値を許可しないソートされたセット型に対し、重複キー値が発生する変更は実行されません。

    • ソートされたセット型のソートキー値を変更できます。ただし、そのセット型のソートキーを構成するすべてのデータ項目(アイテム)は、READY時に指定されたサブスキーマに含まれている必要があります。

    • 重複する拡張索引キーを許可しない拡張索引に対し、拡張索引キー値の重複が発生する変更は実行されません。

    • 拡張索引キー値を変更できます。ただし、拡張索引の拡張索引キーを構成するすべてのデータ項目(アイテム)は、READY時に指定されたサブスキーマに含まれている必要があります。

    • 圧縮されたデータ項目のサイズを変更する方法には、以下の2つがあります。

      • SCHEMAコマンドのRANGE項目(エントリ)にDIVIDED句を指定します。

      • RANGE項目のTYPE句にRELOCATIONを指定します。

    それ以外のレンジに対しては、圧縮されたデータ項目のサイズを増やすことができません。(未サポート)

    • 可変長レコードの内容を変更する場合、アプリケーションは変更するデータと該当のレコードに対する制御情報をユーザー作業領域に設定する必要があります。(未サポート)

    • 可変長レコードの長さを変更する方法には、以下の2つがあります。

      • SCHEMAコマンドのRANGE項目(エントリ)にDIVIDED句を指定します。(未サポート)

      • RANGE項目のTYPE句にRELOCATIONを指定します。(未サポート)

    • 可変長レコードを変更する場合、アプリケーションは変更するデータと該当のレコード長を示す制御情報をユーザー作業領域に設定する必要があります。(未サポート)

6.8. STORE

データベースに1つのレコードを保存します。1つのSTOREコマンドを使用してレコードの保存と該当のレコードをメンバー・レコードとしてセットに接続する操作を一度に実行するように指定することができます。

  • フォーマット

    • フォーマット1

      STORE {record-name|unique-name-1} TO {set-name|unique-name-2}
             AT END GO TO procedure-name.
    • フォーマット2

      STORE {record-name|unique-name-1}
            [TO {{{set-name|unique-name-2}
            {NEXT|PRIOR|integer|AT unique-name-3]}...|ALL}].
      • レコード型名をrecord-nameまたはunique-name-1に指定します。

      • セット型名をset-nameまたはunique-name-2に指定します。

      • NEXT、PRIOR、integer、またはAT unique-name-3を使用して、レコードがセットに接続される際の位置を指定します。

      • レコードが接続されるセット型を明示的に指定する場合は、フォーマット1を使用します。(指定されたセット構造がCIRCULAR型の場合、レコードは少なくとも1つのセットには接続されている必要があります)

      • STOREコマンドを使用してリスト構造セットにレコードを保存および接続する際、メンバーを保存できる範囲を超える場合は、AT END句に指定されたプロシージャが呼び出されます。

      • 保存するレコードをセットに接続する際、整数値で接続位置を指定する場合は、フォーマット2を使用します。この場合、set-nameかunique-name-2に指定されたセット型はリスト構造である必要があります。(未サポート)

      • NEXTまたはPRIORを指定して接続位置を指定するときは、フォーマット2を使用します。この場合、set-nameまたはunique-name-2に指定されたセット型はリング構造である必要があります。

      • unique-name-3には、英数字型または数値型変数を指定でき、以下のように処理されます。

        • 英数字型変数であり、リング構造セットの場合は、長さを1にします。この変数に指定できる値は、N、P、空白です。NはNEXT、PはPRIORを意味します。空白が指定された場合、システムは接続位置をユーザーが指定しないものとみなして処理します。

        • 数値型変数であり、リスト構造セットの場合、符号付き4桁の数値型を持つ必要があります。(未サポート)

      • TO ALLを指定すると、保存するレコード型をメンバー・レコードとして持つすべてのセットにレコードを接続します。(READY時に指定されたサブスキーマに含まれたセット型のうち、保存するレコードをメンバーとして持つすべてのセット型を意味します)

  • 規則

    • record-nameまたはunique-name-1に指定されるレコード型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • set-nameまたはunique-name-2に指定されるセット型は、READYコマンドを実行する際に指定されたサブスキーマに含まれている必要があります。

    • record-nameまたはunique-name-1に指定されるレコード型はスキーマに定義されている必要があり、該当のレコード型はset-nameかunique-name-2に指定されたセットのメンバー・レコードとして定義されている必要があります。レコードは、STCSが指すセット・オカレンスに接続されます。

    • 保存するレコードが特定のセット上で接続される位置は以下のとおりです。TO文によって指定されます。

      • リング構造セットに対してNEXT(または、PRIOR)が指定された場合、接続位置はSTCSが指す位置の直後(または、直前)です。STOREコマンドのTO文によって指定される接続位置は、スキーマに定義された基本接続位置よりも優先されます。

      • リスト構造セットに対して整数値が指定された場合は、指定された整数値に該当する位置が接続位置となります。(未サポート)

      • unique-name-3が数値型変数の場合は、整数値が指定された場合と同様に処理されます。(未サポート)

      • 接続位置が指定されていないか、あるいはTO ALLが指定された場合、リング構造のレコードはSCHEMAコマンドのSET副項目(サブエントリ)のINSERTION文に指定された基本接続位置に接続されます。

      • NORMALリスト構造では、STCSが指す位置の次の位置に接続されます。

      • CIRCULARリスト構造でのレコード接続位置は、軸セット型が指す位置が使用されます。

    • 可変長レコードを保存する場合、アプリケーションは保存するデータと該当のレコードの制御情報をユーザー作業領域に設定する必要があります。(未サポート)

    • STOREコマンドは、レコードを保存およびセットに接続するためにSTCSを参照します。そのため、すべてのセット型のSTCSはレコードが接続されるセット・オカレンスを指している必要があります。

    • 例外として、システム・セット型のメンバー・レコードを保存および接続する場合、システム・セット型のセット・オカレンスは一意であるため、そのシステム・セット型のSTCSが設定されていなくても構いません。(未サポート)

    • 索引エントリ・レコード型またはランダム・エントリ・レコード型のレコードを保存する場合、索引エントリまたはランダム・エントリのキーとして使用されるデータ項目はREADY時に指定されたサブスキーマに含まれている必要があります。

    • レンジがサブレンジに分割されている場合、オーナー・レコードを保存するか、CSP(Current Store Point)を使用してメンバー・レコードを保存するには、ロケーション・キーをユーザー作業領域に設定する必要があります。(レンジ・オーナー・レコードのロケーション・キー値をユーザー作業領域に保存します)

    • 索引エントリ・レコードまたはランダム・エントリ・レコードを保存するには、ユーザー作業領域にエントリ・キー値を設定する必要があります。

    • ユーザー・ランダム・エントリ・レコードを保存するには、ユーザー・ランダム関数を使用して計算された論理ページ番号をFCOM領域のPAGENO変数に設定する必要があります。

    • ソートキーを指定してレコードを保存するには、そのソートキーの値をユーザー作業領域に設定する必要があります。

    • 可変長レコードを保存する場合、アプリケーションは保存するデータと該当のレコード長の情報を示す制御情報をユーザー作業領域に設定する必要があります。

7. エラーコード

アプリケーションはデータベース操作コマンドを実行した後、要求したコマンドが正常に実行されたことを確認する必要があります。データベースによるコマンド実行の処理結果は、FCOM通信領域のDBSCBとDBECBに返されます。

返されたDBSCBとDBECBの値に応じて、例外およびエラーの深刻度が決まります。

深刻度 DBSCB値 DBECB値

正常終了(Normal termination)

DBSCB=0

DBECB=0

軽度のエラー(Minor error)

DBSCB!=0

DBECB=0

中程度のエラー(Moderate error)

DBSCB!=0

DBECB!=0

深刻なエラー(Severe error)

DBSCB=0

DBECB!=0

  • 軽度および中程度のエラー

    軽度または中程度のエラーが発生した場合、データベースはトランザクションを強制停止せずに、アプリケーションに実行制御を返します。アプリケーションは発生したエラータイプに応じて、トランザクションを続行するか、または停止するかを決めることができます。

  • 深刻なエラー

    深刻なエラーが発生した場合、データベースは実行中のトランザクションを取り消し、アプリケーションに実効制御を返します。通常、深刻なエラーが発生すると、アプリケーションは異常終了します。

    深刻なエラーは、DBECBの値に応じて以下のように区別されます。

    DBECB値 説明

    20 ~ 29

    処理するレコードおよびセット関連の不一致

    30 ~ 39

    機密性保護エラー

    40 ~ 49

    リソース割り当てエラー

    50 ~ 59

    データベース動作エラー

    60 ~ 69

    リソース・アクセス・エラー

    70 ~

    分散データベース動作エラー

    88

    デッドロックの発生

    99

    致命的なエラー、あるいはデータベースの破損

7.1. 詳細なエラーコード

以下は、エラーの深刻度別に返されるエラーコードに関する説明です。

DBSCBおよびDBECBに返されるエラーコードは、それぞれ2桁ずつ計4桁の10進数で構成されます。次のエラーコードの先頭の2桁はDBSCB値であり、後ろの2桁はDBECBの値です。つまり、0111はDBSCB=01、DBECB=11を意味します。

  • エラー無し

    エラーコード 説明

    0000

    Normal termination

    コマンドの正常終了です。

  • 軽度のエラー

    エラーコード 説明

    0100

    Failed logical connection

    論理的に接続されたレコードの検索に失敗しました。

    0200

    Previously disconnected set found

    セットからレコードの接続を解除する際、すでに接続が解除されたセットが存在する場合に発生します。接続解除が要求されたすべてのセットから、レコードが正常に接続解除された状態です。

    0300

    Record for deletion owns a member

    削除対象となるレコードのメンバー・レコードが存在する場合に発生します。レコードは削除されていない状態です。

    0400

    Orphan record in a logical structure

    セットからレコードの接続を解除した結果として、階層的な検索方法(セットを使用した検索方法)が使用され、再検索できない場合に発生します。エントリ検索方法などレコードを再検索できる場合は該当しません。エラーコードが返される時点では、すでに接続が解除された状態なので、そのレコードに対する追加処理が必要です。(他のセットに接続するか、PGCSを記憶しておき、後で処理することができます)

  • 中程度のエラー

    エラーコード 説明

    0111

    Logical connection failure and set end condition

    0100と1111例外が同時に発生しました。

    1111

    End condition on a set or an area

    セットの最後から順次検索によってオーナー・レコードが検索された場合に発生します。または、レンジ、索引、拡張索引の順次検索およびDUPLICATE検索の際、それ以上検索できる内容が存在しないときに発生します。

    1212

    No records found by position

    検索対象となるセット上の指定された位置または方向にレコードが存在しないか、あるいは、拡張索引上の指定された方向にレコードが存在しないときに発生します。

    1313

    No records found by key value

    指定されたキー値を使用してANYを検索する際、該当するレコードが存在しない場合に発生します。

    1414

    Duplicate key values

    重複キー値を許可しないソートセットに重複キー値を持つメンバー・レコードを接続する場合に発生します。メンバー・レコードとセットの接続は実行されません。類似した状況として、重複キー値を許可しないエントリ・レコード型のレコードを保存する際、すでに同じエントリ・キー値を有するレコードが存在する場合に発生します。これもまた、重複エントリ・キー値を持つレコードは保存されません。

    1515

    Range having a CRP but no storage area

    CRP-レンジにレコードが保存できるスペースが不足する場合に発生します。レコードは保存されません。レコードを保存するには、GET USING CRPコマンドを使用してレコードを読み込み、新しいレコードの保存スペースを確保する必要があります。

    1616

    Set already connected

    レコードをセットに接続する際、すでにレコードがセットに接続されている場合に発生します。また、リスト構造セットの特定の位置にレコードを接続する場合、その位置にすでにレコードが接続されている場合にも発生します。

    1717 (未サポート)

    Compressed data item, variable-type record or variable-length record update failure

    レコードを保存するレンジに、現在データベースに保存されたレコードが占めるスペースを超える内容でレコードが更新されることを許可しないように定義されている場合に発生します。レコードの内容は更新されません。更新を許可するには、SCHEMAコマンドを使用して、該当のレンジの属性を変更する必要があります。

    1818

    Orphan record storage

    STOREコマンドの実行中に、レコードは正常に保存されたが、セットへの接続には失敗したため、オーファン(orphan)レコードが作成された場合に発生します。0400の状況と類似していますが、0400はDISCONNECTコマンドによるオーファン・レコードが作成された場合であり、1818はレコードの保存時点からオーファン・レコードが作成されるという点が異なります。

  • 深刻なエラー

    エラーコード 説明

    0021

    Error in instruction issuance sequence

    データベース操作コマンドの順序が誤ってプログラムされているか、コマンドの実行に使用される間接的な引数(各種カレント・ステータス)が正常に設定されていない場合に発生します。コマンドは実行されません。

    0022

    Virtual database recognition error

    アプリケーション・プログラマーのミスにより、データベースの構造上実行できないコマンドが要求された場合に発生します。

    0023

    List set type member position error

    リスト構造セットに存在しないメンバーの位置が指定された場合に発生します。

    0024

    PGCS specification error

    アプリケーションのカレント・ステータス(PGCS)が正しく設定されていない場合に発生します。この例外は、0021または0022例外が発生した後、適切に措置しなかった場合に発生します。

    0025

    Specification inconsistent with a storage structure

    異なるサブレンジに存在するセット間の接続が許可されていない状況で、接続要求コマンドが発行された場合に発生します。また、存在していない論理ページまたはロケーション・キーがコマンドに指定された場合に発生します。さらに、拡張索引を使用して検索する際、拡張索引サブレンジがデータベースのレンジまたはサブレンジと関連していない場合に発生します。

    0026

    Invalid index key value specification

    許可された最大値を超える索引キー値が指定された場合に発生します。また、索引が作成されていない状態で、索引エントリ・レコードを保存する場合に発生します。

    0027

    Attempt made to edit fixed data in a record

    索引エントリ・キー、ランダム・エントリ・キー、ロケーション・キーなど、変更できないデータ項目の値を更新する場合に発生します。

    0028

    Duplicate key values

    重複キー値を許可しないソートセットに重複キー値を持つメンバー・レコードを接続する場合に発生します。コマンドに1つのセットが明示的に指定された場合は、1414が発生します。これは、接続対象が明示的に与えられていない場合であり、問題が発生していない一部のセットに対しては接続が実行されている可能性があります。類似した状況として、重複キー値を許可しない拡張索引エントリ・レコード型のレコードを保存する場合、すでに同じエントリ・キー値を持つレコードが存在する場合に発生します。これもまた、問題を起こしていない一部の拡張索引には、すでに拡張索引レコードが保存されている可能性があります。

    0031

    ADL definition (SUBSCHEMA or PED) error or application program error

    • 仮想データベース(virtual database or subschema)に含まれないレコードにアクセスを試行した場合です。

    • PEDコマンドのINCLUSION SCHEMA文に含まれていないデータベース(スキーマ)へのアクセスを試行した場合です。

    • 可変長レコードのキーデータ項目が必要なコマンドを、キーデータ項目を選択せずに要求した場合に発生します。0022か0024例外が発生した後、適切に措置しなかった場合に発生します。

    0032

    Prohibited DML issued

    仮想データベース(virtual database or subschema)に含まれたレコードまたはセットであるが、許可されていないコマンドが要求された場合に発生します。

    0041

    Prime area full

    レコードを保存するレンジまたはサブレンジの基本割り当て領域に使用できるスペースが十分でないため、レコードを保存できない場合に発生します。また、拡張索引の基本割り当て領域に拡張索引レコードを保存する際、保存できるスペースが十分でない場合に発生します。レコードまたは拡張索引レコードは保存されません。

    0042

    Database overflow area full

    レンジまたはサブレンジのオーバーフロー領域にレコードを保存する際、空きスペースが十分でないため、レコードを保存できない場合に発生します。

    0043

    Prime area disconnected

    データベースの基本割り当て領域にレコードを保存するか、または拡張索引の基本割り当て領域に拡張索引レコードを保存する際、基本割り当て領域に追加で割り当てられた領域が接続されておらず、レコードを保存できない場合に発生します。レコードまたは拡張索引レコードは保存されません。

    0044

    Database overflow area disconnected

    オーバーフローの領域にレコードを保存する際、オーバーフロー領域に追加で割り当てられた領域が接続されておらず、レコードを保存できない場合に発生します。

    0051

    Database operation error

    データセット、排他的制御アクセス・モード、索引および拡張索引など、データベースが動作するための環境に問題が生じ、正常に処理できない場合に発生します。

    0061

    Input-output(I-O) access failure

    データベース・コマンドの実行中に行われるI/Oに失敗し、正常に処理できない場合に発生します。

    0062

    Access attempted on an area closed on account of an error

    エラーまたは例外によって解除され、使用できなくなったリソースにアクセスする場合に発生します。

    0071

    Remote database access, communication processing error

    リモード・データベースにアクセスするための通信処理に問題がある場合に発生します。

    0072

    Remote database, operation error on server-side

    リモード・データベースにアクセスする際、リモード先のサーバー・システムで動作上のエラーが検知された場合に発生します。