24.2 構造型データベース(XDM/SD)操作シミュレーション
メインフレームで構造型データベースXDM/SD(Extensible Data Manager/Structured Database)を操作するプログラムを,UNIX上でコンパイル,実行できます。このプログラムのコンパイル,実行,テストの方法について説明します。
- 〈この節の構成〉
-
(1) コンパイル方法
プログラムのコンパイルまでの手順を次に示します。
-
データベース情報をCOBOL宣言文に展開する。
メインフレーム上でXDMのユティリティを使用し,データベース情報であるスキーマ情報,サブスキーマ情報をCOBOL宣言文に展開します。このとき,COBOL宣言文(COPY文で展開される原文)は,XDM E2系ユティリティJXBSAIDを使用して作成します。
- (COBOL宣言文の展開例)
-
![[図データ]](GRAPHICS/ZU150600.GIF)
-
COBOL宣言文をUNIXに転送する。
作成したCOBOL宣言文を,ファイル転送プログラムを使用してUNIXに転送します。このとき,UNIX上で受け取るファイル名は"サブスキーマ名スキーマ名.cbl"(上記の例では,HSB1HSC1.cbl)とする必要があります。
-
プログラムをコンパイルする。
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文の引数」に示します。また,各項目の詳細を次の表に示します。
-
表24‒3 インタフェースエリアの詳細
-
表24‒4 DML情報エリアの詳細
-
表24‒5 固有情報エリアの詳細
表24‒2 データベース操作文で内部的に展開されるCALL文の引数
引数の項目
|
設定内容
|
インタフェースエリア
|
01 SD-IFA.
02 FILLER PIC X(4).
02 SD-IFA-01 PIC X(5). ………… 実行結果を表す状態コード
02 SD-IFA-02 PIC X(1). ………… データベース条件の実行結果
02 SD-IFA-03 PIC X(30). ………… 検索したレコードビュー名
02 FILLER PIC X(30).
02 SD-IFA-04 PIC X(2). ………… 使用しない
02 SD-IFA-05 PIC X(2). ………… 使用しない
02 FILLER PIC X(26).
02 SD-IFA-06 PIC X(20). ………… 使用しない
02 FILLER PIC X(12).
02 SD-IFA-07 PIC S9(4) COMP. … カーソルグループ番号
02 SD-IFA-08 PIC X(4). ………… サブ状態コード
02 SD-IFA-09 PIC S9(4) COMP. … レコードビュー長
02 FILLER PIC X(20).
02 SD-IFA-10 PIC X(30). ………… データベース操作文種別
02 FILLER PIC X(66).
02 SD-IFA-11 PIC X(30). ………… サブスキーマ名
02 SD-IFA-12 PIC X(30). ………… スキーマ名
02 FILLER PIC X(196). |
DML情報エリア
|
01 SD-DML.
02 SD-DML-01 PIC S9(4) COMP. … DML情報エリア長
02 FILLER PIC X(2).
02 SD-DML-02 PIC X(2). ………… DML区分
02 SD-DML-03 PIC X(2). ………… 要求種別
02 SD-DML-04 PIC X(2). ………… 一括検索範囲指定
02 SD-DML-05 PIC X(2). ………… 位置指示子指定
02 SD-DML-06 PIC X(30). ………… ビュー名
02 FILLER PIC X(2).
02 SD-DML-07 PIC X(30). ………… インデクス名/
親子集合ビュー名
02 FILLER PIC X(2).
02 SD-DML-08 PIC X(2). ………… 探索方向
02 SD-DML-09 PIC X(2). ………… 位置決め目的
02 SD-DML-10 PIC S9(9) COMP. … 探索方向の整数値
02 SD-DML-11 PIC X(30). ………… パス名
02 FILLER PIC X(14). |
固有情報エリア
(手続き文の各指定情報)
|
01 SD-TYP.
02 SD-TYP-01 PIC X(2). ………… データ名指定情報
02 FILLER PIC X(6).
02 SD-TYP-02 PIC X(2). ………… 条件種別
02 FILLER PIC X(2).
02 SD-TYP-03 PIC X(2). ………… 左辺指定子
02 SD-TYP-04 PIC X(30). ………… 左辺指定子ビュー名
02 SD-TYP-05 PIC X(2). ………… 右辺指定子
02 SD-TYP-06 PIC X(30). ………… 右辺指定子ビュー名
02 SD-TYP-07 PIC X(2). ………… 検索条件の比較演算子
02 SD-TYP-08 PIC X(30). ………… 検索条件の構成要素
ビュー名
02 FILLER PIC X(32).
02 SD-TYP-09 PIC X(1). ………… RETAINING種別
02 FILLER PIC X(1).
02 SD-TYP-10 PIC S9(4) COMP. … 親子集合ビュー数
02 FILLER OCCURS 2000 DEPENDING ON SD-TYP-10.
03 SD-TYP-11 PIC X(30). ……… 親子集合ビュー名
03 FILLER PIC X(2). |
データ受け渡しエリアおよび付加機能用情報エリア
|
データ名
|
表24‒3 インタフェースエリアの詳細
領域名
|
CALL文
実行前
|
シミュ
レータ
|
CALL文
実行後
|
内容
|
SD-IFA-01
|
−
|
設定
|
参照
|
実行結果を表す。
STATUS句で指定したデータ名の領域に転記される。
|
SD-IFA-02
|
−
|
設定
|
参照
|
データベース条件の結果を表し,データベース条件の判定に使用する。
'1':判定結果は真
'0':判定結果は偽
|
SD-IFA-03
|
−
|
設定
|
参照
|
検索したレコードビュー名を表す。
RECORD NAME句に指定したデータ名の領域に転記される。RECORD NAME句の指定がない場合は転記されない。
|
SD-IFA-04
|
−
|
−
|
−
|
使用しない。
|
SD-IFA-05
|
−
|
−
|
−
|
使用しない。
|
SD-IFA-06
|
−
|
−
|
−
|
使用しない。
|
SD-IFA-07
|
設定
|
参照
|
−
|
カーソルグループ番号を表す。
CURSOR NUMBER句に指定したデータ名の領域から転記される。
CURSOR NUMBER句の指定がない場合は0が転記される。
|
SD-IFA-08
|
−
|
設定
|
参照
|
サブ状態コードを表す。
DETAIL CODE句で指定したデータ名の領域に転記される。DETAIL CODE句の指定がない場合は転記されない。
|
SD-IFA-09
|
−
|
設定
|
参照
|
処理対象のレコードビュー長を表す。
RECORD LENGTH句で指定したデータ名の領域に転記される。
RECORD LENGTH句の指定がない場合は転記されない。
|
SD-IFA-10
|
設定
|
参照
|
−
|
データベース操作文の種別を表す。
'CONNECT' = CONNECT文
'DISCONNECT' = DISCONNECT文
'ERASE' = ERASE文
'FETCH' = FETCH文
'FIND' = FIND文
'GET' = GET文
'MODIFY' = MODIFY文
'NULLIFY' = NULLIFY文
'RECONNECT' = RECONNECT文
'STORE' = STORE文
'TEST' = データベース条件文
|
SD-IFA-11
|
設定
|
参照
|
−
|
サブスキーマを表す。
サブスキーマが転記される。
|
SD-IFA-12
|
設定
|
参照
|
−
|
スキーマを表す。
スキーマが転記される。
|
データ受け渡しエリアおよび付加情報エリアでは,各文中に指定されたデータ名が引数になります。指定できるデータ名を次に示します。
-
FETCH文のDATA AREAまたはINTOに指定されたデータ名
-
GET文のDATA AREAまたはINTOに指定されたデータ名
-
MODIFY文のFROMに指定されたデータ名
-
STORE文のFROMに指定されたデータ名
-
FETCH文またはFIND文のUSINGに指定されたデータ名
表24‒4 DML情報エリアの詳細
領域名
|
CALL文
実行前
|
シミュ
レータ
|
CALL文
実行後
|
内容
|
SD-DML-01
|
設定
|
−
|
−
|
DML情報エリア長を表す。
128の固定長が転記される。
|
SD-DML-02
|
−
|
−
|
−
|
使用しない。
|
SD-DML-03
|
設定
|
参照
|
−
|
要求種別を表す。
'P' = ERASE文でALL指定なし。
'R' = FETCH(1)文でWITHIN,INDEXEDの指定なし。
または,FIND文でCURRENT,WITHIN,INDEXEDの指定なし。
'RI'= FETCH(1),FIND文でINDEXED指定あり。
'S' = FETCH(1),FIND文でWITHIN指定あり。
'C' = FIND文でCURRENT指定あり。
'H' = FETCH(2)文でWITHIN,INDEXEDの指定なし。
'HI'= FETCH(2)文でINDEXED指定あり。
'M' = FETCH(2)文でWITHIN指定あり。
'N' = GET(2)文。
|
SD-DML-04
|
設定
|
参照
|
−
|
一括検索範囲指定を表す。
'A' = FETCH文でADVANCING指定あり。
|
SD-DML-05
|
設定
|
参照
|
−
|
位置指示子指定を表す。
'S' = NULLIFY文でレコードビュー名,OWNER,MEMBERの指定なし。
または,CURRENT指定ありのFIND文で,レコードビュー名,OWNER,MEMBERの指定なし。
'R' = NULLIFY文でレコードビュー名の指定あり。
または,FIND文でCURRENT レコードビュー名の指定あり。
'O' = NULLIFY文でOWNER OF 親子集合ビュー名の指定あり。
または,FIND文でCURRENT OWNER OF 親子集合ビュー名の指定あり。
'M' = NULLIFY文でMEMBER OF 親子集合ビュー名の指定あり。
または,FIND文でCURRENT MEMBER OF 親子集合ビュー名の指定あり。
|
SD-DML-06
|
設定
|
参照
|
−
|
次のレコードビュー名または親子集合ビュー名を表す。
-
CONNECT,DISCONNECT,ERASE,FETCH,GET,MODIFY,RECONNECT,STORE文で指定されたレコードビュー名
-
FIND文でCURRENT指定がない場合のレコードビュー名
-
FIND,NULLIFY文でCURRENTに指定されたレコードビュー名または親子集合ビュー名
|
SD-DML-07
|
設定
|
参照
|
−
|
次のインデクス名または親子集合ビュー名を表す。
-
FETCH,FIND文でINDEXED指定がある場合のインデクス名
-
FETCH,FIND,GET文でWITHIN指定がある場合の親子集合ビュー名
-
CONNECT,DISCONNECT,RECONNECT文で指定された先頭の親子集合ビュー名
|
SD-DML-08
|
設定
|
参照
|
−
|
探索方向を表す。
'F' = FETCH,FIND文でFIRST指定あり。
'L' = 〃 LAST指定あり。
'N' = 〃 NEXT指定あり。
'P' = 〃 PRIOR指定あり。
'A' = 〃 RELATIVE指定なし。
'R' = 〃 RELATIVE指定あり。
'D' = 〃 DYNAMIC指定あり。
|
SD-DML-09
|
設定
|
参照
|
−
|
位置決め目的を表す。
'U' = FETCH,FIND文でUPDATE指定あり。
|
SD-DML-10
|
設定
|
参照
|
−
|
探索方向の整数値を表す。
RELATIVE指定時,未指定時の一意名または整数の値。
|
SD-DML-11
|
設定
|
参照
|
−
|
パス名を表す。
FETCH文に指定されたパス名。
|
FETCH(1)文,FETCH(2)文,GET(2)文は,それぞれ次の文を指します。
-
FETCH(1)文:DATA AREA指定なしのFETCH文
-
FETCH(2)文:DATA AREA指定ありのFETCH文
-
GET(2)文:DATA AREA指定ありのGET文
表24‒5 固有情報エリアの詳細
領域名
|
CALL文
実行前
|
シミュ
レータ
|
CALL文
実行後
|
内容
|
SD-TYP-01
|
設定
|
参照
|
−
|
データ名指定を表す。
'U' = USING指定あり。
|
SD-TYP-02
|
設定
|
参照
|
−
|
条件種別を表す。
'A' = データベース条件文のALSO指定
'NA'= 〃 NOT ALSO指定
'N' = 〃 NULL指定
'NN'= 〃 NOT NULL指定
'E' = 〃 EMPTY指定
'NE'= 〃 NOT EMPTY指定
'C' = 〃 CONTAINS指定
空白 = 上記以外
|
SD-TYP-03
|
設定
|
参照
|
−
|
左辺指定子を表す。
'R' = データベース条件左辺にレコードビュー名を指定
'O' = 〃 OWNER OF 親子集合ビュー名を指定
'M' = 〃 MEMBER OF 親子集合ビュー名を指定
'S' = 〃 レコードビュー名,OWNER,MEMBERのどの指定もなし
'X' = 〃 親子集合ビュー名を指定
空白 =上記以外
|
SD-TYP-04
|
設定
|
参照
|
−
|
データベース条件左辺のレコードビュー名または親子集合ビュー名を表す(SD-TYP-03が 'S'または空白のときは,この領域も空白となる)。
|
SD-TYP-05
|
設定
|
参照
|
−
|
右辺指定子を表す。
'R' = データベース条件右辺にレコードビュー名を指定
'O' = 〃 OWNER OF 親子集合ビュー名を指定
'M' = 〃 MEMBER OF 親子集合ビュー名を指定
'S' = 〃 レコードビュー名,OWNER,MEMBERのどの指定もなし
'X' = 〃 親子集合ビュー名を指定
空白 =上記以外
|
SD-TYP-06
|
設定
|
参照
|
−
|
データベース条件右辺のレコードビュー名または親子集合ビュー名を表す(SD-TYP-05が 'S'または空白のときは,この領域も空白となる)。
|
SD-TYP-07
|
設定
|
参照
|
−
|
探索条件の最初に現れた比較演算子を表す。
'>' = GREATER THAN または > 指定
'<' = LESS THAN または < 指定
'=' = EQUAL または = 指定
'>='= GREATER THAN OR EQUAL または >= 指定
'<='= LESS THAN OR EQUAL または <= 指定
空白= 上記以外
|
SD-TYP-08
|
設定
|
参照
|
−
|
探索条件の最初に現れた構成要素ビュー名またはKEYを表す
(SD-TYP-07が空白のときは,この領域も空白となる)。
|
SD-TYP-09
|
設定
|
参照
|
−
|
RETAINING種別を表す。
'A' = RETAINING指定ありのFETCH,FIND,STORE文で,RECORD,親子集合ビュー名の指定がない。
'R' = ERASE文でRETAINING指定あり。
または,RETAINING RECORD指定ありのFETCH,FIND,STORE文で,親子集合ビュー名の指定がない。
'S' = RETAINING 親子集合ビュー名指定ありのFETCH,FIND,STORE文で,RECORDの指定がない。
'B' = FETCH,FIND,STORE文に,RETAINING RECORD 親子集合ビュー名の指定がある。
|
SD-TYP-10
|
設定
|
参照
|
−
|
RETAININGに指定された親子集合ビューの個数を表す。親子集合ビュー名の指定があれば,その個数が入る。
|
SD-TYP-11
|
設定
|
参照
|
−
|
RETAININGに指定された親子集合ビュー名を表す(SD-TYP-10が0の場合,この領域はない)。
|
- (凡例)
-
−:該当しない
- 注
-
SD-TYP-02〜06は,データベース条件文情報です。
SD-TYP-07,08は,探索条件情報です。
SD-TYP-09〜11は,RETAINING情報です。
(4) XDM/SDプログラムのテスト方法の制限事項
COBOL原始プログラムのコンパイル時,次の部分はエラーチェックの対象となりません。
(a) XDMシステム定義のスキーマ定義にだけ指定され,サブスキーマ節に展開されない部分
-
親子集合で親レコード,子レコードの対応関係があるもの
例えば,親子集合型内を検索するFETCH文で,レコードビュー名で示すレコードは,親子集合ビュー名で示す親子集合の子レコードにしなければなりません。
-
パスで指定したレコードの関係にあるもの
例えば,パス順に複数のレコードを検索するFETCH文で,エントリレコード名で示すレコードは,パス名で示すパスのエントリレコードにしなければなりません。
-
副構成要素に関するもの
例えば,条件を指定したFETCH文で,比較条件に指定した構成要素ビュー名で示す構成要素は,副構成要素以外にしなければなりません。
(b) XDMシステム定義のサブスキーマ定義にだけ指定され,サブスキーマ節に展開されない部分