COBOL2002 使用の手引 手引編


24.2 構造型データベース(XDM/SD)操作シミュレーション

メインフレームで構造型データベースXDM/SD(Extensible Data Manager/Structured Database)を操作するプログラムを,UNIX上でコンパイル,実行できます。このプログラムのコンパイル,実行,テストの方法について説明します。

〈この節の構成〉

(1) コンパイル方法

プログラムのコンパイルまでの手順を次に示します。

  1. データベース情報をCOBOL宣言文に展開する。

    メインフレーム上でXDMのユティリティを使用し,データベース情報であるスキーマ情報,サブスキーマ情報をCOBOL宣言文に展開します。このとき,COBOL宣言文(COPY文で展開される原文)は,XDM E2系ユティリティJXBSAIDを使用して作成します。

    (COBOL宣言文の展開例)

    [図データ]

  2. COBOL宣言文をUNIXに転送する。

    作成したCOBOL宣言文を,ファイル転送プログラムを使用してUNIXに転送します。このとき,UNIX上で受け取るファイル名は"サブスキーマ名スキーマ名.cbl"(上記の例では,HSB1HSC1.cbl)とする必要があります。

  3. プログラムをコンパイルする。

    UNIXに転送されたCOBOL宣言文(COPY展開される原文)は,コンパイル時のSUBSCHEMA SECTION解析中にCOPY文と同様に展開されます。このため,COBOL宣言文の入ったファイルは,登録集原文が展開できるディレクトリ下に置く必要があります。

(2) 実行方法

手続き部に記述したFIND文,FETCH文などのデータベース操作文は,"CALL 'CBLXDMSD' USING 引数 ……"と内部的に展開されます。展開されたCALL文で呼び出されるプログラムでシミュレーションをする場合は,'CBLXDMSD'という名称の関数を作成し,コンパイル,リンクして実行可能ファイルを生成しておきます。この結果,手続き部のデータベース操作文は,'CBLXDMSD'で作成した関数を呼び出せます。

なお,'CBLXDMSD'という名称の関数を,コンパイル,リンクして実行可能ファイルを生成しないときは,コンパイラが提供する,構造型データベース(XDM/SD)操作シミュレーション機能の実行時ライブラリ用ダミールーチンCBLXDMSDが実行されます。

(3) 内部的に展開されるCALL文の引数

CALL文に展開されたデータベース操作文の引数によって,利用者はXDM/SDプログラムをテストできます。内部的に展開されるCALL文の引数の形式を次に示します。

形式
CALL 'CBLXDMSD' USING インタフェースエリア
   DML情報エリア 固有情報エリア (その他の引数) …

データベース操作文で内部的に展開されるCALL文を次に示します。

表24‒1 データベース操作文で内部的に展開されるCALL文

データベース操作文

内部的に展開されるCALL文と設定される引数

データベース条件文

CALL 'CBLXDMSD' USING インタフェースエリア
                      ,DML情報エリア
                      ,固有情報エリア

CONNECT文

DISCONNECT文

ERASE文

NULLIFY文

RECONNECT文

CALL 'CBLXDMSD' USING インタフェースエリア
                      ,DML情報エリア
                      ,固有情報エリア

FETCH文※1

FIND文

GET文※1

MODIFY文

STORE文

CALL 'CBLXDMSD' USING インタフェースエリア
                      ,DML情報エリア
                      ,固有情報エリア
                      ,データ受け渡しエリア※2
                    〔,付加機能用情報エリア〕※3

FETCH文※4

CALL 'CBLXDMSD' USING インタフェースエリア
                      ,DML情報エリア
                      ,固有情報エリア
                      ,データ受け渡しエリア※5

GET文※4

CALL 'CBLXDMSD' USING インタフェースエリア
                      ,DML情報エリア
                      ,固有情報エリア
                      ,データ受け渡しエリア※2
                      ,データ受け渡しエリア※5

注※1 DATA AREA指定がありません。

注※2

FROM,INTOで指定したデータ名です。指定しない場合にはサブスキーマ節の先頭のレコードビュー名が使用されます。

注※3

FIND文,DATA AREA指定なしのFETCH文でUSINGを指定したときのデータ名です。〔 〕で囲まれた引数を指定しない場合,引数はBY REFERENCE指定でZERO(4バイトの0)を渡します。

注※4 DATA AREA指定があります。

注※5 DATA AREAで指定したデータ名です。

データベース操作文で内部的に展開されるCALL文の引数を「表24‒2 データベース操作文で内部的に展開されるCALL文の引数」に示します。また,各項目の詳細を次の表に示します。

データ受け渡しエリアおよび付加情報エリアでは,各文中に指定されたデータ名が引数になります。指定できるデータ名を次に示します。

FETCH(1)文,FETCH(2)文,GET(2)文は,それぞれ次の文を指します。

(4) XDM/SDプログラムのテスト方法の制限事項

COBOL原始プログラムのコンパイル時,次の部分はエラーチェックの対象となりません。

(a) XDMシステム定義のスキーマ定義にだけ指定され,サブスキーマ節に展開されない部分

  • 親子集合で親レコード,子レコードの対応関係があるもの

    例えば,親子集合型内を検索するFETCH文で,レコードビュー名で示すレコードは,親子集合ビュー名で示す親子集合の子レコードにしなければなりません。

  • パスで指定したレコードの関係にあるもの

    例えば,パス順に複数のレコードを検索するFETCH文で,エントリレコード名で示すレコードは,パス名で示すパスのエントリレコードにしなければなりません。

  • 副構成要素に関するもの

    例えば,条件を指定したFETCH文で,比較条件に指定した構成要素ビュー名で示す構成要素は,副構成要素以外にしなければなりません。

(b) XDMシステム定義のサブスキーマ定義にだけ指定され,サブスキーマ節に展開されない部分

  • アクセス目的に関するもの

    例えば,FOR UPDATE(更新)を指定したFETCH文で,レコードビュー名で示すレコードは,サブスキーマ定義でUPDATE指定をしなければなりません。