>サイトトップへ >このカテゴリの一覧へ

X 3004 - 1987

(1) 

目次

ページ

1.

  適用範囲

1

2.

  関連規格

2

3.

  概要

2

3.1

  構成

2

3.2

  表記法

2

3.3

  規約

3

3.4

  規格合致性

3

4.

  概念

4

4.1

  データ型

4

4.1.1

  文字列

4

4.1.2

  数

4

4.2

  構成要素

4

4.3

  レコード

5

4.3.1

  データベースキー

5

4.3.2

  システムレコード

5

4.4

  親子集合型

5

4.4.1

  特異親子集合

6

4.4.2

  再帰親子集合

6

4.5

  スキーマ

6

4.6

  サブスキーマ

6

4.7

  データベース

6

4.8

  モジュール

6

4.9

  手続

6

4.10

  標準プログラム言語

7

4.11

  一時親子集合

7

4.12

  パラメタ

7

4.12.1

  STATUS パラメタ

7

4.12.2

  TEST パラメタ

7

4.12.3

  RECORD パラメタ

7

4.13

  セション

7

4.14

  トランザクション

8

4.15

  整合性制約

8

4.15.1

  検査条件

8

4.15.2

  既定値

8

4.15.3

  一意性制約

8


X 3004 - 1987

目次

(2) 

ページ

4.15.4

  親子集合順序基準

8

4.15.5

  親子関係

9

5.

  共通要素

9

5.1

  <条件>

9

5.2

  <オペランド>

11

5.3

  <識別子>

11

5.4

  <定数>

12

5.5

  <データ型>

13

5.6

  <反復句>

14

5.7

  <添字>

15

5.8

  <分離符号>及び<語>

15

6.

  スキーマ定義言語

16

6.1

  <スキーマ>

16

6.2

  <スキーマ名句>

16

6.3

  <レコード型>

17

6.4

  <レコード名句>

17

6.5

  <レコード一意性句>

17

6.6

  <構成要素型>

18

6.7

  <構成要素名句>

18

6.8

  <既定句>

18

6.9

  <レコード検査句>

19

6.10

  <親子集合型>

19

6.11

  <親子集合名句>

20

6.12

  <親レコード句>

20

6.13

  <順序句>

20

6.14

  <子レコード句>

22

6.15

  <子レコード名句>

22

6.16

  <組入れ句>

23

6.17

  <保存句>

24

6.18

  <子レコード一意性句>

24

6.19

  <キー句>

25

6.20

  <子レコード検査句>

27

6.21

  <構成要素識別子>

28

7.

  サブスキーマ定義言語

29

7.1

  <サブスキーマ>

29

7.2

  <サブスキーマ名句>

29

7.3

  <レコードビュー>

29

7.4

  <構成要素ビュー>

30

7.5

  <親子集合ビュー>

31


X 3004 - 1987

目次

(3) 

ページ

8.

  モジュール言語

31

8.1

  <モジュール>

32

8.2

  <モジュール名句>

32

8.3

  <一時親子集合指定群>

33

8.4

  <手続>

33

9.

  データ操作言語

37

9.1

  <COMMIT 文>

37

9.2

  <CONNECT 文>

37

9.3

  <DISCONNECT 文>

38

9.4

  <ERASE 文>

38

9.5

  <FIND 文>

39

9.6

  <GET 文>

43

9.7

  <MODIFY 文>

44

9.8

  <NULLIFY 文>

45

9.9

  <READY 文>

46

9.10

  <RECONNECT 文>

46

9.11

  <ROLLBACK 文>

47

9.12

  <STORE 文>

47

9.13

  <データベースキー等価テスト文>

49

9.14

  <データベースキーナルテスト文>

50

9.15

  <親子集合空テスト文>

50

9.16

  <親子関係テスト文>

50

9.17

  <データベースキー識別子>

51

9.18

  <構成要素ビュー識別子>

52

9.19

  <パラメタ識別子>

53

9.20

  <パラメタ転送>と<データベース転送>

53

10.

  補助操作

54

10.1

  <組入れ操作>

54

10.2

  <切離し操作>

56

11.

  解釈上の状態

57

11.1

  <セション状態>

57

11.2

  <位置指示子群>

57

11.3

  <一時親子集合群>

59

11.4

  <準備リスト>

59

12.

  状態コード

59

13.

  水準

60

参考

61

索引 1.用語索引(用語-英語)

71

索引 2.用語索引(英語-用語)

81


日本工業規格

JIS

 X

3004

 - 1987

データベース言語 NDL

Database Language NDL

1.

適用範囲  適用範囲は,次のとおりとする。

(1)

この規格は,次の三つのデータベース言語の構文と意味を規定する。

(a)

スキーマ定義言語:NDL データベース(以下,データベースという。

)の構造と整合性制約 (integrity

constraint)

を宣言する。

(b)

サブスキーマ定義言語:データベースについての利用者ビューを宣言する。

(c)

モジュール言語とデータベース操作言語:特定のデータベース適用業務プログラム (application

program)

のデータベース手続と実行可能文を宣言する。

(2)

この規格は,データベースに対する論理データ構造と基本操作を定義する。この規格は,データベー

スの設計・アクセス・保守・制御・保護のための機能を規定する。

(3)

この規格は,規格に合致する処理系 (implementation) 間でのデータベース定義と適用業務プログラム

の可搬性の手段を規定する。

(4)

この規格は,二つの水準を規定する。水準 2 は,完全 NDL データベース言語とする。水準 1 は,

13.

水準”で定義される部分集合とする。

(5)

この規格は,実データベース環境で提供されうる機能のうち,次に掲げるものは規定しない。

(a)

特定の利用者にアクセスと操作の権限を付与するためのアクセス制御機能。

(b)

データベース上でより複雑な整合性制約を指定するための付加的整合性制御機能。

(c)

スキーマ定義を搬入したり搬出したりするための機能。

(d)

情報交換のために,レコードと親子集合の実現値の集まりを標準ファイルに複写するためのデータ

ベースアンロード機能。

(e)

アクセスする適用業務プログラムからスキーマとサブスキーマを使用可能にするためのスキーマデ

ータベース。

(f)

スキーマ又はサブスキーマの一部を作成,修正又は削除するためのスキーマ操作言語。

(g)

データ辞書 (data dictionary) へのインタフェース。

(h)

標準データベースモジュールと標準言語プログラムを別々に生成するための適用業務プログラム事

前処理機能。

(i)

物理記憶構造と物理アクセス方法を定義するためのデータ記憶定義言語。

(j)

利用者が指定する主張 (assertion) と引き金 (trigger) のためのデータベース手続。

(k)

データベースに対する非定型アクセスのための自然言語問合せ機能。

(l)

帳票及び図表を作成するための報告書作成機能。

(m)

標準グラフィックスシステムとの直接的データベースインタフェースのためのグラフィックス機能。

(n)

通信ネットワーク中の異なった地点 (node) にあるデータを定義しアクセスするための分散データ


2

X 3004 - 1987

ベース機能。

参考  このような付加的な機能に対する規格は,この規格と上位互換がある方法で規定できる。付加

的な機能の幾つかは,この規格の次版以降で規定され,他のものは,別の規格で規定されるこ

ともあり,またあるものは,常に処理系作成者の定義によることもある。

(6)

この規格は,データベース設計・データ管理・性能最適化のための様々な道具はもちろん,適用業務

プログラム言語・エンドユーザ問合せ言語・報告書作成システム・データ辞書システム・プログラム

ライブラリシステム・分散通信システムを含む環境中に存在する処理系に適用される。

2.

関連規格  関連規格は,次による。

2.1

引用規格

(1)  JIS X 3001-1982

  電子計算機プログラム言語 FORTRAN

(2)  JIS X 3002-1980

  電子計算機プログラム言語 COBOL

2.2

引用国際規格

(1)  ISO 6160

  Programming Languages PL/I

(2)  ISO 7185

  Programming Languages PASCAL

2.3

対応国際規格

(1)  ISO 8907

  Database Language NDL

3.

概要

3.1

構成  この規格は,次のとおり構成する。

(1)

3.2

表記法”と“3.3 規約”は,この規格で用いる表記法と規約を定義する。

(2)

3.4

規格合致性”は,規格合致性の基準を定義する。

(3)

4.

概念”は,NDL の定義中で用いる用語を定義し,概念を述べる。

(4)

5.

共通要素”は,NDL 言語のいろいろな部分に現れる言語要素を定義する。

(5)

6.

スキーマ定義言語”は,データベースを規定するための NDL の機能を定義する。

(6)

7.

サブスキーマ定義言語”は,適用業務プログラムによって参照され得るデータベースの部分を規

定するための NDL の機能を定義する。

(7)

8.

モジュール言語”は,NDL のモジュールと手続を定義する。

(8)

9.

データ操作言語”は,NDL のデータ操作文 (data manipulation statement) を定義する。

(9)

10.

補助操作”は,NDL のデータ操作文の定義中で用いられる特定の操作を定義する。

(10)

11.

解釈上の状態”は,NDL のデータ操作文の定義中で用いられる“セション状態”を定義する。

(11)

12.

状態コード”は,NDL のデータ操作文の実行後の STATUS パラメタの値を定義する。

(12)

13.

水準”は,NDL の二つの水準を定義する。

3.2

表記法  この規格で用いる構文表記法は,次の拡張を行った BNF(“バッカス正規形”又は“バッカ

ス−ナウア形”

)とする。

(1)

角括弧(

[  ]

)は,選択可能な要素を示す。

(2)

反復符号(...)は,1 回以上繰り返してもよい要素を示す。

(3)

波括弧(

{  }

)は,要素の並びをまとめる。

BNF

構文では,生成記号<A>の展開のどこかに生成記号<B>が現れるならば,<A>が<B>を“含

む”と定義する。<A>が<B>を含むならば,<B>は<A>に“含まれる”とする。<A>が<B>を含


3

X 3004 - 1987

むならば,<A>は<B>を“含んでいる”生成記号<A>とする。

生成記号<A>が生成記号<B>を含み,かつ<B>が<A>の最初の展開に現れるならば,<A>は<B

>を“直接含む”とする。

この規格の語い単位(例えば,<分離符号>,<キーワード>,<識別子>,<定義>など)は,この

規格の中で別に定義する。次の文字は,それぞれの生成規則の中で特別の意味をもつ。

’<拡張識別子>中

”<文字列定数>中

(<注釈>,<条件>,<添字>中

)<注釈>,<条件>,<添字>中

*<注釈>中

+<数値定数>中

−<数値定数>中

<<関係>中

><関係>中

=<構成要素識別子致>,<関係>,<データベースキ等価テスト文>中

E

<概数値定数>中

−<識別子>中

・<構成要素識別子>,<構成要素ビュー識別子>,<数値定数>,<サブスキーマ名句>,

<サブスキーマ指定>中

3.3

規約  この規格の構文要素は,次の項目で規定する。

(1)

機能:要素の目的についての短い文

(2)

形式:要素の構文の BNF 定義

(3)

構文規則:要素が満たされなければならない付加的な構文制約であって,BNF では表せないもの

(4)

一般規則:要素の実行時の効果を順番に指定する。

構文規則中で,

“(し)なければならない”という用語は,構文上規格に合致する NDL 言語に要求

される条件を定義する。形式や構文規則に合致しない NDL 言語の取扱いは,処理系作成者の定義に

よる。

規格に合致する処理系は,一般規則で定義される動作を一般規則の順番で実行することは要求され

ないが,データベースに対してこの順番と同じ効果を達成しなければならない。

“永続対象”という用語は,処理系作成者の定義による仕組みで生成され,破壊される<モジュー

ル>や<スキーマ>のような対象を特徴付けるために用いる。

3.4

規格合致性  この規格は,規格に合致する NDL 言語と規格に合致する NDL の処理系を規定する。

規格に合致する NDL 言語は,

BNF

形式や対応する構文規則に従わなければならない。

規格に合致する NDL

の処理系は,規格に合致する NDL 言語を一般規則に従って処理しなければならない。

規格に合致する処理系は,この規格で規定されていない付加的な機能を提供してもよい。たとえ規格に

合致しない NDL 言語を処理したり,規格に合致する NDL 言語を規格に合致しない方法で処理したりする

利用者オプションを提供するときでさえも,処理系は,規格合致性を維持している。

この規格は,適用業務プログラムとデータベース管理システム構成要素との結合の方法や時機を定義し

ない。

この規格の水準 1 に合致する処理系は,

13.

水準”で規定される特定の機能を除いて,水準 2 の規格合


4

X 3004 - 1987

致性の要求項目を満たさなければならない。

この規格は,三つの言語を規定し,それらの構文と意味を定義する。データベース管理システムの処理

系作成者は,この規格に対する製品の規格合致性を二つの方法で主張できる。処理系は,これらの言語と

同一の構文を支援し,構文的及び機能的な規格合致性を主張してもよく,又は,同じ概念,意味,機能性

を表すために異なる構文を用い,機能的な規格合致性を主張してもよい。

三つの標準言語のいずれかに対して機能的な規格合致性を主張する処理系は,これらの標準言語の意味

と機能に合った等価な書き方を指定しなければならない。例えば,データベース管理システム表示機能に

よって表示されるスキーマは,標準スキーマ定義言語構文の表現に記号変換できることによって,スキー

マの機能的な等価性を示せることが望ましい。

4.

概念

4.1

データ型  <データ型 (data type)>は,表現可能な値の集合とする。値の論理的表現は,<定数

(literal)

>とする。値の物理的表現は,処理系作成者の定義による。

値は,基本要素とし,この規格において,論理的に分割されることがない。値は,データ項目 (data item)

と配列 (array) の定義の基礎とする。

値は,文字列又は数のいずれかとする。文字列と数は,相互に比較可能な値ではない。

4.1.1

文字列  文字列は,処理系作成者の定義による文字集合の文字の並び (sequence) からなる。文字

列は長さをもち,その長さは並びの中の文字数を指定する正の整数とする。

4.1.2

数  数は,真数値  (exact numeric value)  又は概数値  (approximate numeric value)  のいずれかとする。

すべての数は,比較可能な値とする。

真数値は,精度 (precision) と位取り (scale) をもつ。精度は,有効十進けた数を決める正の整数とする。

位取りは,符号付き整数とする。位取りが 0 とは,その数を整数とすることを示す。位取り N に対し,真

数値は,有効数字の整数値に 10 の−N 乗をかけた値とする。

概数値は,仮数 (mantissa) と指数 (exponent) からなる。仮数は符号付き数値とし,指数は仮数の大きさ

を指定する符号付き整数とする。概数値は,精度をもつ。精度は,仮数中の有効十進けた数を指定する正

の整数とする。

真数値が真数値を表すデータ項目又はパラメタに代入されるときはいつでも,その値は相手のデータ型

で正確に表現可能でなければならない。値は,相手の精度と位取りをもつように変換される。

真数値又は概数値が概数値を表すデータ項目又はパラメタに代入されるときはいつでも,その値の近似

は,相手のデータ型で表現される。値は,相手の精度をもつように変換される。

4.2

構成要素  構成要素 (component) は,データ項目又はデータ項目の配列のいずれかとする。<構成

要素型>は,すべての同じ<データ型>をもつ構成要素の実現値 (occurrence) の集まりを定義する。

データ項目は,一つの値からなる。配列は,データ項目の並びからなる。

配列は<範囲 (extent)>によって指定され,その<範囲>は<符号なし整数>のリストとする。配列に

現れるデータ項目の個数は,<符号なし整数>の積に等しい。配列に含まれないデータ項目は,<構成要

素名>と<データベースキー>によって参照される。配列に含まれるデータ項目は,<構成要素名>,<

データベースキー>及び<添字>によって参照される。

同じ<構成要素型>のすべての値は,同じ<データ型>をもつ。<構成要素型>が配列を定義するなら

ば,各構成要素の実現値は,同じ次元と範囲の整数をもつ配列とする。同じ文字列の構成要素のすべての

文字列は,同じ<長さ>をもつ。同じ真数の構成要素のすべての数は,同じ<精度>と<位取り>をもつ。


5

X 3004 - 1987

同じ概数の構成要素のすべての数は,同じ<精度>をもつ。

いずれの<構成要素型>も<レコード型>の一部分として定義される。<構成要素型>は,<データ型

>を指定する。<構成要素型>が配列を定義するならば,それは,<範囲>を指定する。文字列<構成要

素型>は,その文字列の<長さ>を指定する。真数<構成要素型>は,その数の<精度>と<位取り>を

指定する。概数<構成要素型>は,その数の<精度>を指定する。

4.3

レコード  レコード (record) は,この規格中で操作の基本単位とする。レコードは,格納,消去,

位置決め,変更され,親子集合内で接続,切断,再接続される。

レコードは,構成要素の集まりとする。<レコード型>は,すべて同じ<構成要素型>をもつレコード

実現値の集まりを定義する。<レコード型>は,<構成要素型>を定義し,レコード実現値が満たさなけ

ればならない整合性制約 (integrity constraint) を指定する。

各レコードは唯一の<レコード型>の実現値とし,その<レコード型>によって定義される構成要素だ

けからなる。

各<レコード型>のレコードは,処理系作成者の定義による順序に従って保持される。

4.3.1

データベースキー  すべてのレコードは,区別することができる。各レコードは,<データベース

キー>により一意に識別される。<データベースキー>は,ナル (null) であってどのレコードも識別しな

いか,又はナルでなくてデータベース中の唯一のレコードを識別するかのいずれかとする。<データベー

スキー>は,どのような論理的表現ももたず,この規格により定義されるどのインタフェースによっても

利用可能でない。<データベースキー>の物理的表現は,処理系作成者の定義による。

<データベースキー>は,セション状態 (session state) 中の位置指示子 (cursor) を表現するため及びデ

ータ操作言語中の文の意味を定義するために用いられる。

セション状態中では,

<データベースキー>は,

<データベースキー>によって参照される。データ操作言語文中では,<データベースキー>は,<デー

タベースキー識別子>によって参照される。

4.3.2

システムレコード  この規格は,特殊な SYSTEM<レコード型>の存在を想定する。SYSTEM<

レコード型>は,どのような<構成要素型>や整合性制約をももたず,システムレコードと呼ばれる唯一

の仮想的なレコード実現値をもつ。

この規格は,システムレコードに対する<データベースキー>を規定しない。システムレコードと

SYSTEM

<レコード型>は,特異親子集合 (singular set) の定義のためにだけ存在する。

4.4

親子集合型  <親子集合型(set type)>は,二つ以上の<レコード型>の間で定義された関連とする。

<親子集合型>中では,一つの<レコード型>は,親 (owner) <レコード型>として示され,他の各<

レコード型>は,その<親子集合型>の

子 (member) <レコード型>として参照される。

各<親子集合型>に対して,データベース中に 0 個以上の

親子集合がある。

親子集合は,その<レコード型>が親<レコード型>である一つの

親レコードと,各レコード型が子<

レコード型>である 0 個以上の

子レコードからなる。

親子集合は,データベース中で,その<親子集合名>とその親レコード実現値によって一意に識別され

る。<親子集合型>の親<レコード型>の実現値がデータベースに格納されるとき,その<親子集合型>

の新しい親子集合が生成される。

<レコード型>の実現値がデータベースに格納されるとき,それは,その<レコード型>が子<レコー

ド型>である各<親子集合型>の高々一つの親子集合に属する。

<親子集合型>の各親子集合の子レコードは,その<親子集合型>の順序基準によって決定される並び

順で保持される。


6

X 3004 - 1987

4.4.1

特異親子集合  特異 (singular) <親子集合型>は,親<レコード型>として SYSTEM をもつ<親

子集合型>とする。特異親子集合は,特異<親子集合型>の唯一の実現値とする。

4.4.2

再帰親子集合  再帰 (recursive) <親子集合型>は,同じ<レコード型>を親<レコード型>と子

<レコード型>の双方にもつ<親子集合型>とする。再帰親子集合は,再帰<親子集合型>の実現値とす

る。

4.5

スキーマ  <スキーマ>は,スキーマ定義言語により指定される永続対象とする。<スキーマ>は,

データベースの論理的な記述とする。<スキーマ>は,<スキーマ名>,<レコード型>記述の集まり及

び<親子集合型>記述の集まりからなる。

4.6

サブスキーマ  <サブスキーマ>は,サブスキーマ定義言語によって指定される永続対象とする。

<サブスキーマ>は,アクセス<モジュール>が使用可能なデータベースの部分の論理的な記述とする。

<サブスキーマ>は,<サブスキーマ名>,<レコードビュー>の集まり及び<親子集合ビュー>の集ま

りからなる。

<レコードビュー>は,与えられた<レコード型>の使用可能な<構成要素型>を指定する。<親子集

合ビュー>は,使用可能な<親子集合型>を指定する。<レコードビュー>と<親子集合ビュー>は,組

み合わされて各<親子集合型>の使用可能な子<レコード型>を決める。

<レコードビュー>と<親子集合ビュー>は,<構成要素型>,<レコード型>及び<親子集合型>に

対して,それぞれ<構成要素ビュー名>,<レコードビュー名>及び<親子集合ビュー名>の別名を定義

できる。別名は,アクセス<モジュール>にとって,<構成要素型>,<レコード型>及び<親子集合型

>に対してだけ使用可能な名前となる。

アクセス<モジュール>が使用可能なレコードは,処理系作成者の定義による順序 (order) に保持され

る。この順序は,各<レコード型>のレコードの処理系作成者の定義による順序と必ずしも同じでない。

4.7

データベース  データベースは,<スキーマ>によって定義されるすべてのデータの集まりとする。

それは,各<レコード型>と各<親子集合型>の実現値からなる。各<スキーマ>定義に対して唯一のデ

ータベースがある。

4.8

モジュール  <モジュール>は,モジュール言語中で指定される永続対象とする。<モジュール>

は,選択可能な<モジュール名>,<言語句>,<サブスキーマ指定>,選択可能な<一時親子集合指定

群>及び一つ以上の<手続>からなる。

適用業務プログラムは,複数のサブプログラムからなり得る実行可能コードの部分とする。一つの<モ

ジュール>は,実行時中は一つの適用業務プログラムと結合する。一つの適用業務プログラムは,複数の

<モジュール>と結合されてはならない。この結合を指定する方法は,処理系作成者の定義による文の実

行の要求を含めて,処理系作成者の定義による。

4.9

手続  <手続 (procedure)>は,<手続名>,<パラメタ宣言>の並び及び<NDL 文>の並びからな

る。

<モジュール>と結合する適用業務プログラムは,その<モジュール>の<手続>を“呼出し (call)”

文によって参照でき,その“呼出し”文は,<手続>の<手続名>を指定し,その手続の<パラメタ宣言

>における個数と<データ型>が一致するパラメタ値の並びを与える。<手続>の呼出しによって,それ

が含む<NDL 文>の並びが実行される。

<モジュール>の<サブスキーマ指定>は,<モジュール>によって参照できるレコードや親子集合を

定義する<サブスキーマ>を指定する。

<モジュール>の<一時親子集合指定群(temporary set specifications)>は,<モジュール>によって参照


7

X 3004 - 1987

できる一時的な<親子集合型>を定義する。

4.10

標準プログラム言語  この規格は,特定の標準プログラム言語規格に合致するプログラムから<モ

ジュール>中の<手続>が呼び出されたときのその<手続>の動作を規定する。“標準 COBOL プログラ

ム”

“標準 FORTRAN プログラム”

“標準 Pascal プログラム”及び“標準 PL/I プログラム”という用語は,

2.

関連規格”で挙げる規格の規格合致性の基準に合うプログラムをいう。

4.11

一時親子集合  <一時親子集合 (temporary set)>は,一時<親子集合型>の実現値とする。一時<親

子集合型>は,<モジュール>中の<一時親子集合指定>によって宣言される。

<モジュール>中の各<一時親子集合指定>に対し,対応する一時<親子集合型>の実現値は,<モジ

ュール>が開始したときに生成され終了したときに抹消される。

4.12

パラメタ  パラメタは,<パラメタ宣言>によって<手続>中で宣言される。<パラメタ宣言>は,

パラメタが基本データ項目かデータ項目の配列かを指定し,またその値の<データ型>を指定する。パラ

メタは,その手続の呼出し中の対応する引数の値をとるか又は与えるかする。

4.12.1  STATUS

パラメタ  STATUS パラメタは,<長さ>5 文字の特殊なパラメタとする。このようなパ

ラメタが<手続>で宣言されるならば,その値には状態コード (status code) が設定され,そのコードは,

<手続>の呼出しが正しく完了したことを示すか,又は<手続>実行中に生じた例外の条件を識別する。

4.12.2  TEST

パラメタ  TEST パラメタは,<長さ>1 文字の特殊なパラメタとする。テスト文がこのパ

ラメタを含む<手続>中で実行されるならば,パラメタの値には,そのテストが真ならば“1”が,偽なら

ば“0”が設定される。

4.12.3  RECORD

パラメタ  RECORD パラメタは,<長さ>18 文字の特殊なパラメタとする。このよう

なパラメタが<手続>で宣言されるならば,それには,<セション状態>の<セション位置指示子>によ

って識別されるレコードの<レコード名>が設定される。

4.13

セション  データベース操作は,<NDL 文>の実行とする。

セションは,<モジュール>に結合する適用業務プログラムの実行中になされるデータベース操作の並

びとする。

<セション状態>は,セションに結合する短期対象とする。<セション状態>は,そのセション中の最

初のデータベース操作に先立って生成され,そのセション中の最終のデータベース操作のあと抹消される。

<セション状態>は,<位置指示子>,<一時親子集合群>及び<準備リスト>からなる。<位置指示

子>は,現セションレコードを識別するための<セション位置指示子>,各<サブスキーマ><レコード

型>の現レコードを識別するための<レコード位置指示子>及び各<サブスキーマ><親子集合型>の現

親子集合中の親レコードと現親子レコードを識別するための<親子集合位置指示子>を含む。<一時親子

集合群>は,結合する<モジュール>により定義される各<一時親子集合>の内容を保持する。<準備リ

スト>は,<READY 文>で活性化された各<レコード型>に対し<準備指定>を保持する。

<セション状態>は,<NDL 文>によってだけ適用業務プログラムで使用可能となる。<セション状態

>の内容は,結合する<モジュール>の<手続>中の<NDL 文>の実行に基づいてデータベース管理シス

テムによって変更される。データ操作言語は,<データベースキー>の位置決めと比較及び<準備リスト

>と各<一時親子集合>の内容の変更を行うための<NDL 文>を含む。


8

X 3004 - 1987

4.14

トランザクション  トランザクションは,データベース操作を含む操作の並びとし,それは,回復

(recovery)

や同時実行 (concurrency) に関して基本単位となる。トランザクションは,<COMMIT 文>又

は<ROLLBACK 文>によって終了する。トランザクションが<COMMIT 文>により終了するならば,デ

ータベースに対し,そのトランザクションによってなされたすべての変更は,すべての同時実行トランザ

クションに対しアクセス可能となる。このことをコミットするという。トランザクションが<ROLLBACK

文>によって終了するならば,データベースに対し,そのトランザクションによってなされたすべての変

更は,取り消される。このことをロールバックするという。コミットされた変更を取り消すことはできな

い。トランザクションによってなされたデータベースに対する変更は,そのトランザクションでは知るこ

とができるが,そのトランザクションが<COMMIT 文>によって終了するまでは,他のトランザクション

では知ることはできない。

同時実行トランザクションの実行は,直列可能 (serializable) であることが保証される。直列可能な実行

は,同時実行中のトランザクションの操作の実行で,それらの同じトランザクションのある直列実行と同

じ効果を生成するものと定義される。直列実行では,次のトランザクションが開始する前に各トランザク

ションが実行を完了するものとする。

トランザクション内での<NDL 文>の実行は,その<NDL 文>に対する一般規則で述べられている効

果以外には,データベースや<セション状態>に影響を与えない。直列可能な実行とともに,これは,ト

ランザクションそれ自身によって陽になされた変更を除いては,すべての読込み操作がトランザクション

内で再生可能であることを意味する。

4.15

整合性制約  整合性制約 (integrity constraint) は,データベースの正当な状態を限定する。整合性制

約は,<レコード型>又は<親子集合型>に対してと,親<レコード型>と子<レコード型>間の構成要

素制約に対して定義される。

整合性制約は,各<NDL 文>の実行後に検査される。整合性制約に関連する対象が制約を満たさないな

らば,<NDL 文>はデータベースに対して影響を与えず,STATUS パラメタは特定の例外を示すように設

定される。

4.15.1

検査条件  検査条件 (check condition) は,データベース中の状態が変更されるときレコードの値に

よって満たされなければならない表現式とする。表現式は,<レコード型>の<レコード検査句>の<条

件>,又は<親子集合型>の<子レコード検査句>の<条件>によって指定される。

4.15.2

既定値  既定値 (default value) は,<手続>によって陽に値が与えられないすべての構成要素実現

値に対して想定される値とする。既定値は,<構成要素型>の<既定句 (default clause)>中の<定数>に

よって指定される。

4.15.3

一意性制約  一意性制約 (uniqueness constraint) は,与えられた<レコード型>のどの二つのレコ

ードも,また与えられた<親子集合型>の親子集合のどの二つの子レコードも,データベースの中で指定

された構成要素に対して同一の値をとることがないという指定とする。一意性制約は,<レコード型>中

の<レコード一意性句>,又は<親子集合型>の<子レコード句>中の<子レコード一意性句>によって

指定される。

4.15.4

親子集合順序基準  親子集合順序 (set ordering) は,一つの親子集合中の子レコードの並び順を指

定する。順序は,次のいずれかとする。

(1)

構成要素の値による整列順

(2)

発生順又は逆発生順

(3)

与えられた子レコードの直後又は直前としての相対順


9

X 3004 - 1987

(4)

処理系作成者の定義による順

親子集合順序基準は,<親子集合型>の<順序句>によって指定され,かつその順序が整列順ならば,

その<親子集合型>に含まれる各<子レコード句>の<キー句>によって指定される。

4.15.5

親子関係  親子関係 (set membership) は,一つのレコードが子レコードとして現れる各親子集合に

対し,そのレコードの組入れモード (insertion mode) 及び保存モード (retention mode) を指定する。各子<

レコード型>は,組入れモード及び保存モードをもつ。

組入れ (insertion) は,自動 (automatic),構造 (structural) 又は手動 (manual) のいずれかとする。組入れ

が手動ならば,陽に<CONNECT 文>によってだけレコードが親子集合中の子レコードとして組み入れら

れる。組入れが自動又は構造ならば,子<レコード型>の各レコードは,それが最初にデータベースに格

納されるとき,その<親子集合型>のある親子集合の子レコードとなる。組入れが自動又は手動ならば,

親レコードは,適用業務プログラムによって識別される。組入れが構造ならば,組み入れられるレコード

の特定のデータ項目に等しい値をもつ親レコードがデータベース管理システムによって選ばれる。組入れ

モードは,<スキーマ>の各<子レコード句>中の<組入れ句>によって指定される。

保存は,固定 (fixed),準固定 (mandatory) 又は任意 (optional) のいずれかとする。保存が固定ならば,

ある親子集合の子レコードとなったレコードは,それがデータベースから消去されるまでその親子集合の

子レコードのままでいる。保存が準固定ならば,ある親子集合の子レコードとなったレコードは,それが

データベースから消去されるまで同じ<親子集合型>のどれかの親子集合の子レコードのままでいる。保

存が任意ならば,ある親子集合の子レコードとなったレコードは,その親子集合又はその<親子集合型>

の任意の親子集合の子レコードのままでいる必要はない。保存モードは,<スキーマ>の各<子レコード

句>中の<保存句>によって指定される。

5.

共通要素

5.1

<条件>

5.1.1

機能  真又は偽のいずれかとして評価される表現式を指定する。

5.1.2

形式  形式は,次による。

<条件>  ::=

<選択条件>[

{OR<選択条件>}

<選択条件>  ::=

<単純条件>[

{AND<単純条件>}

<単純条件>  ::=

<副条件>

|<否定副条件>

|<関係条件>

<副条件>  ::=(<条件>)

<否定副条件>  ::=

 NOT

(<条件>)

<関係条件>  ::=

<オペランド><関係><オペランド>

<関係>  ::=

<|<=|=|>=|>|<>


10

X 3004 - 1987

5.1.3

構文規則  構文規則は,次による。

(1)

<関係条件 (relation condition)>の最初の<オペランド>が配列を指定するならば,その<関係条件>

の 2 番目の<オペランド>は配列を指定してはならない。

(2)

最初のオペランドの型が文字列ならば,2 番目のオペランドの型は文字列でなければならない。最初

のオペランドの型が真数ならば,2 番目のオペランドの型は真数又は概数でなければならない。最初

のオペランドの型が概数ならば,2 番目のオペランドの型は真数又は概数でなければならない。

5.1.4

一般規則  一般規則は,次による。

(1)

<条件 (condition)>は,それに含まれる任意の<選択条件 (alternative)>が

真ならば真とし,そうでな

ければ

偽とする。

(2)

<選択条件>は,

それに含まれるいずれの<単純条件>も

真ならば真とし,そうでなければ偽とする。

(3)

<副条件>を直接含む<単純条件>は,<副条件>が

真ならば真とし,そうでなければ偽とする。

<否定副条件>を直接含む<単純条件>は,<否定副条件>に直接含まれる<条件>が

偽ならば真

とし,そうでなければ

偽とする。

<関係条件>を直接含む<単純条件>は,<関係条件>が

真ならば真とし,そうでなければ偽とす

る。

(4)

<関係条件>の最初の(2 番目の)オペランドは,その<関係条件>内の最初の(2 番目の)オペラン

ドの値とする。

(5)

<関係条件>の<関係>は,<関係条件>の二つのオペランドの間でなされる比較を指定する。選択

的<関係>によって指定される比較は,次による。

関係>

比較

より小さい

<=

より小さいか等しい

等しい

>=

より大きいか等しい

より大きい

<>

等しくない

(6)

<関係条件>のオペランドがどちらも配列でないならば,<関係条件>は,二つのオペランドの指定

された比較が

真ならば真とし,そうでなければ,<関係条件>は偽とする。<関係条件>のオペラン

ドの一つが配列ならば,<関係条件>は,他のオペランドと配列並び中のいずれの値との指定された

比較が

真ならば真とし,そうでなければ<関係条件>は,偽とする。

(7)

比較は,次のとおりとする。

(7.1)

オペランドが真数型又は概数型ならば,比較は,それらの数値に従って実行される。

(7.2)

オペランドが文字列型であるならば,

(a)

二つのオペランドの長さが等しくないならば,短いオペランドが空白文字で長いオペランドの長さ

まで右側に拡張されたものとみなされる。

(b)

比較は,オペランドの個々の文字を比較しながら左から右へ行われる。

すべてのこのような個々の比較が等しいならば,二つのオペランドは等しく,そうでなければ,

オペランドの比較の結果は,個々の文字の中で最も左側で等しくなかった比較の結果とすると定義

される。

(c)

個々の文字の比較は,処理系作成者の定義による。


11

X 3004 - 1987

(8)

一般規則において,

“より小さい”

“より大きい”

“等しい”

“等しくない”の用語は,対応する関係

演算子を参照する。

5.2

<オペランド>

5.2.1

機能  値を指定する。

5.2.2

形式  形式は,次による。

<オペランド>  ::=

<構成要素識別子>

|<構成要素ビュー識別子>

|<パラメタ識別子>

|<定数>

5.2.3

構文規則  構文規則は,次による。

(1)

<オペランド>の指定は,次のとおりとする。

(a)

<オペランド>が<スキーマ>に含まれるならば,それは<パラメタ識別子>又は<構成要素ビュ

ー識別子>であってはならない。

(b)

<オペランド>が<モジュール>に含まれるならば,それは<構成要素識別子>であってはならな

い。

(2)

<オペランド>のデータ型は,<構成要素識別子>,<構成要素ビュー識別子>,<パラメタ識別子

>又は<定数>のデータ型とする。

5.2.4

一般規則  一般規則は,次による。

(1)

<オペランド>の値は,<構成要素識別子>,<構成要素ビュー識別子>若しくは<パラメタ識別子

>によって参照されるデータ項目若しくは配列とするか,又は<定数>の値とする。

5.3

<識別子>

5.3.1

機能  <手続>中のパラメタ又はデータベース中の対象に対して名前を指定する。

5.3.2

形式  形式は,次による。

<識別子>  ::=

<一般識別子>|<拡張識別子>

<一般識別子>  ::=

<英大文字>

[{[<下線>]<英字又は数字>}...]

<下線>  ::=_

<英字又は数字>  ::=

<英大文字>|<数字>

<英字>  ::=

<英大文字>|<英小文字>

<英大文字>  ::=

  A |B  |C  |D |E  |F |G |H |I

|J  |K |L  |M |N  |O |P |Q |R

|S  |T  |U |V  |W |X |Y |Z

<英小文字>  ::=

  a  |b  |c  |d  |e  |f |g |h |i


12

X 3004 - 1987

|j  |k  |l  |m |n  |o |p |q |r

|s  |t  |u  |v  |w |x |y |z

<数字>  ::=

0

|1|2|3|4|5|6|7|8|9

<拡張識別子>  ::=

’<拡張識別子文字表現>...’

<拡張識別子文字表現>  ::=

<拡張識別子文字>

|<アポストロフィ表現>

<拡張識別子文字>  ::=

構文規則 5.3.3(3)参照

<アポストロフィ表現>  ::=”

5.3.3

構文規則  構文規則は,次による。

(1)

<一般識別子>は,18 文字以内でなければならない。<拡張識別子>は,18 文字以内の<拡張識別子

文字表現>を含まなければならない。

(2)

<一般識別子>は,<キーワード>と同じ文字の並びであってはならない(

5.8

<分離符号>及び<

語>”を参照)。

(3)

<拡張識別子文字>は,アポストロフィ文字(’)以外の処理系作成者の定義による文字集合中の任意

の文字とする。

(4)

<拡張識別子>中の各<アポストロフィ表現>は,単一のアポストロフィ文字を表す。

(5)

<拡張識別子>(囲み用のアポストロフィを別として)が<一般識別子>の形式に合致し,それが<

キーワード>でないならば,囲み用のアポストロフィを取り去ることによって形成される<一般識別

子>と等価とする。

5.3.4

一般規則  一般規則は,次による。

なし。

5.4

<定数>

5.4.1

機能  定数値を指定する。

5.4.2

形式  形式は,次による。

<定数>  ::=

<文字列定数>

|<数定数>

<文字列定数>  ::=

“<文字表現>…”

<文字表現>  ::=

<非引用文字>

|<引用表現>

<非引用文字>  ::=

構文規則 5.4.3(1)参照

<引用表現>  ::=


13

X 3004 - 1987

<数定数>  ::=

<真数定数>

|<概数定数>

<真数定数>  ::=

[

+|−]{<符号なし整数>[.<符号なし整数>]

|<符号なし整数>.

|.<符号なし整数>}

<概数定数>  ::=

<仮数>E<指数>

<仮数>  ::=

<真数定数>

<指数>  ::=

<符号付き整数>

<符号付き整数>  ::=  [+|−]<符号なし整数>

<符号なし整数>  ::=

<数字>…

5.4.3

構文規則  構文規則は,次による。

(1)

<非引用文字 (nonquote character)>は,二重引用記号  (double quote mark)  文字 (”) 以外の処理系作成

者の定義による文字集合の任意の文字とする。

(2)

<文字列定数>のデータ型は,文字列とする。<文字列定数>の長さは,それが含む<文字表現>の

個数とする。<文字列定数>中の各<引用表現>は,<文字列定数>の値と長さの両方において単一

の引用記号文字を表現する。

(3)

小数点 (.) をもたない<真数定数>は,最後の<数字>の後に小数点が想定される。

(4)

<真数定数>のデータ型は,真数とする。<真数定数>の精度は,それが含む<数字>の個数とする。

<真数定数>の位取りは,小数点の右にある<数字>の個数とする。

(5)

<概数定数>のデータ型は,概数とする。<概数定数>の精度は,その<仮数>の有効けた数を表す

ために必要とされる二進けた数の精度とする。

5.4.4

一般規則  一般規則は,次による。

(1)

<文字列定数>の値は,それが含む文字の並びとする。

(2)

<符号なし整数>,<符号付き整数>又は<真数定数>の数値は,符号つき十進表記法の通常の数字

的解釈から導き出される。

(3)

<概数定数>の数値は,<仮数>によって表される真数値と,<指数>によって表される数の 10 のべ

き乗によって得られる数の積とする。

5.5

<データ型>

5.5.1

機能  データ型を指定する。

5.5.2

形式  形式は,次による。

<データ型>  ::=

<文字列型>

|<真数型>

|<概数型>

<文字列型>  ::=

 CHARACTER

  [<長さ>]


14

X 3004 - 1987

<真数型>  ::=

 FIXED

  <精度>[<位取り>]

| NUMERIC  <精度>[<位取り>]

| INTEGER

<概数型>  ::=

 FLOAT

  <精度>

| REAL

| DOUBLE PRECISION

<長さ>  ::=

<符号なし整数>

<精度>  ::=

<符号なし整数>

<位取り>  ::=  <符号付き整数>

5.5.3

構文規則  構文規則は,次による。

(1)

<長さ>又は<精度>である<符号なし整数>の値は,0 より大きくなければならない。

(2)

<長さ>を省略すると,それは 1 と想定される。<位取り>を省略すると,それは 0 と想定される。

5.5.4

一般規則  一般規則は,次による。

(1)

<データ型>は,データ項目値の種類を指定する。

(2)

<データ型>CHARACTER のデータ項目は,指定される<長さ>の値に等しい長さをもつ文字列とす

る。

(3)

<データ型>FIXED のデータ項目は,指定される<位取り>の値に等しい位取りと,指定される<精

度>の値以上の精度の真数値をもつ。

(4)

<データ型>NUMERIC のデータ項目は,指定される<精度>及び<位取り>の値にそれぞれ等しい

精度と位取りの真数値をもつ。精度が P,位取りが S ならば,0 でない NUMERIC データ項目の絶対

値は,1E−S 以上か,1E (P−S)  −1E−S 以下でなければならない。

(5)

<データ型>INTEGER のデータ項目は,位取りが 0 で,処理系作成者の定義による精度の真数値を

もつ。

(6)

<データ型>FLOAT のデータ項目は,指定される<精度>の値以上の精度の概数値をもつ。

(7)

<データ型>REAL のデータ項目は,処理系作成者の定義による精度の概数値をもつ。

(8)

<データ型>DOUBLE PRECISION のデータ項目は,REAL の処理系作成者の定義による精度より大

きい処理系作成者の定義による精度の概数値をもつ。

5.6

<反復句>

5.6.1

機能  <範囲>を指定することによって配列を定義する。

5.6.2

形式  形式は,次による。

<反復句>  ::=

 OCCURS

<範囲>

<範囲>  ::=

<符号なし整数>…

5.6.3

構文規則  構文規則は,次による。

(1)

<範囲>中の各<符号なし整数>の値は,0 より大きくなければならない。

5.6.4

一般規則  一般規則は,次による。

(1)

<反復句>は,データ項目の配列を指定する。<範囲>中の<符号なし整数>の値の積は,配列の各

実現値に含まれるデータ項目の個数を指定する。


15

X 3004 - 1987

5.7

<添字>

5.7.1

機能  配列のデータ項目を指定する。

5.7.2

形式  形式は,次による。

<添字>  ::=

(<オペランド>…)

5.7.3

構文規則  構文規則は,次による。

(1)

<添字>の

該当<反復句>は,<添字>を直接含む生成記号の構文規則で指定される。

(2)

<オペランド>の個数は,該当<反復句>の<範囲>中の<符号なし整数>の個数に等しくなければ

ならない。

(3)

<オペランド>は,次のとおりとする。

(a)

<オペランド>が<定数>ならば,それは<符号なし整数>でなければならず,その値は正とし,

かつ,該当<反復句>の<範囲>の対応する<符号なし整数>の値より大きくてはならない。

(b)

<オペランド>が<定数>でないならば,そのデータ型は,位取りが 0 の真数でなければならない。

5.7.4

一般規則  一般規則は,次による。

(1)  d

を<添字>中の<オペランド>の数とする。

(2)  1

から d までの i に対して,Si を<添字>中の i 番目の<オペランド>の値とする。

(3)  1

から d までの i に対して,

Ei

を該当<反復句>の<範囲>中の i 番目の<符号なし整数>の値とする。

(4)  1

から d までの i に対して,Si が 1 より小さいか又は Si が Ei より大きいならば,

配列参照:添字が境

界外であるの例外を発生させる。

(5) Md

を 1 とする。1 から (d−1)  までの i に対して,Mi を (i+1)  から d までの j に対する項 Ej の積と

する。

(6)  J

を 1 から d までの i に対する項 Mi* (Si−1)  の和とする。

(7)

<添字>の値は,J+1 とする。

5.8

<分離符号>及び<語>

5.8.1

機能  語い単位を指定する。

5.8.2

形式  形式は,次による。

<分離符号>  ::=

{<注釈>|<空白>|<改行>}…

<注釈>  ::=

*[<文字>…]*)

<文字>  ::=

<数字>|<英字>|<特殊文字>

<特殊文字>  ::=

構文規則 5.8.3(1)参照

<空白>  ::=

空白

<改行>  ::=

処理系作成者の定義による行端標識

<語>  ::=

<キーワード>|<識別子>|<定数>


16

X 3004 - 1987

<キーワード>  ::=

 ABSOLUTE

|ALL|AND|AS|ASCENDING|AUTOMATIC

|CASCADE|CHARACTER|CHECK|COBOL|COMMIT|CONNECT|CONTAINS

|DEFAULT|DESCENDING|DISCONNECT|DOUBLE|DUPLICATES

|EMPTY|ERASE|EXCLUSIVE

|FIND|FINISH|FIRST|FIXED|FLOAT|FOR|FORTRAN|FROM|FULL

|GET|IN|INSERTION|INTEGER|ITEM|KEY|LANGUAGE|LAST

|MANDATORY|MANUAL|MEMBER|MODIFY|MODULE

|NEXT|NOT|NULL|NULLIFY|NUMERIC

|OCCURS|OF|OPTIONAL|OR|ORDER|OWNER

|PARTIAL|PASCAL|PLI|PRECISION

|PRIOR|PROCEDURE|PROHIBITED|PROTECTED

|READY|REAL|RECONNECT|RECORD|RELATIVE|RENAMED

|RETAIN|RETENTION|RETRIEVE|ROLLBACK

|SCHEMA|SESSION|SET|SHARED|SORTED

|STATUS|STORE|STRUCTURAL|SUBSCHEMA|SYSTEM

|TEST|TO|TYPE|UNIQUE|UPDATE|WHERE|WITH

5.8.3

構文規則  構文規則は,次による。

(1)

<特殊文字>は,<数字>又は<英字>以外の処理系作成者の定義による文字集合中の任意の文字と

する。処理系作成者の定義による行端標識 (end-of-line indicator)(<改行>)が文字ならば,それも<

特殊文字>から除外する。

(2)

<スキーマ>,<サブスキーマ>又は<モジュール>は,最終的に<分離符号>によって任意に区切

られる<語>及び記号の並びからなるように生成される。

<語>は,

<分離符号>を挟むことなしに,

すぐ後に他の<語>が続いてはならない。

(3)

<注釈>内の列“<文字>…”は,部分列  “*)”  を含んではならない。

5.8.4

一般規則  一般規則は,次による。

なし。

6.

スキーマ定義言語

6.1

<スキーマ>

6.1.1

機能  データベースの論理的構造を定義する。

6.1.2

形式  形式は,次による。

<スキーマ>  ::=

<スキーマ名句>

{<レコード型>|<親子集合型>}…]

6.1.3

構文規則  構文規則は,次による。

なし。

6.1.4

一般規則  一般規則は,次による。

なし。

6.2

<スキーマ名句>


17

X 3004 - 1987

6.2.1

機能  <スキーマ>に名前を付ける。

6.2.2

形式  形式は,次による。

<スキーマ名句>  ::=

 SCHEMA

  <スキーマ名>

<スキーマ名>  ::=

<識別子>

6.2.3

構文規則  構文規則は,次による。

(1)

<スキーマ名>は,同一環境中の他のどの<スキーマ>の<スキーマ名>とも異ならなければならな

い。環境の概念は,処理系作成者の定義による。

6.2.4

一般規則  一般規則は,次による。

(1)

<スキーマ名句>は,それを含む<スキーマ>を指す<スキーマ名>となる<識別子>を定義する。

6.3

<レコード型>

6.3.1

機能  <レコード型>を定義する。

6.3.2

形式  形式は,次による。

<レコード型>  ::=

<レコード名句>

{<レコード一意性句>

|<構成要素型>

|<レコード検査句>}…]

6.3.3

構文規則  構文規則は,次による。

なし。

6.3.4

一般規則  一般規則は,次による。

なし。

6.4

<レコード名句>

6.4.1

機能  <レコード型>に名前を付ける。

6.4.2

形式  形式は,次による。

<レコード名句>  ::=

 RECORD

  <レコード名>

<レコード名>  ::=

<識別子>

6.4.3

構文規則  構文規則は,次による。

(1)

<レコード名>は,それを含む<スキーマ>中の他のどの<レコード名句>の<レコード名>とも異

ならなければならない。

6.4.4

一般規則  一般規則は,次による。

(1)

<レコード名句>は,それを含む<レコード型>を指す<レコード名>となる<識別子>を定義する。

6.5

<レコード一意性句>

6.5.1

機能  <レコード型>の実現値に対して一意性制約を指定する。

6.5.2

形式  形式は,次による。

<レコード一意性句>  ::=

 UNIQUE

  <構成要素識別子>…

6.5.3

構文規則  構文規則は,次による。

(1)

<構成要素識別子>の<構成要素名>が配列を指すならば,その<構成要素識別子>は,<添字>を


18

X 3004 - 1987

含まなければならない。

(2)

同じ<構成要素識別子>は,一つの<レコード一意性句>に複数含まれてはならない。

(3)

<レコード一意性句>中の各<構成要素識別子>の該当<レコード型>は,その<レコード一意性句

>を含む<レコード型>とする。

6.5.4

一般規則  一般規則は,次による。

(1)

<レコード一意性句>の<構成要素識別子>がレコード実現値に対して参照されるとき,それらの<

構成要素識別子>の該当<データベースキー>は,そのレコード実現値の<データベースキー>とす

る。

(2)

データベースが<レコード一意性句>を含む<レコード型>の二つの実現値を含み,第 1 のレコード

実現値の<レコード一意性句>中の<構成要素識別子>によって指される構成要素の各値と,第 2 の

レコード実現値の対応する構成要素の値とが等しいならば,<レコード一意性句>に関する違反とな

る。

6.6

<構成要素型>

6.6.1

機能  <構成要素型>を定義する。

6.6.2

形式  形式は,次による。

<構成要素型>  ::=

<構成要素名句>

<データ型>

[<反復句>]

[<既定句>]

6.6.3

構文規則  構文規則は,次による。

なし。

6.6.4

一般規則  一般規則は,次による。

なし。

6.7

<構成要素名句>

6.7.1

機能  <構成要素型>に名前を付ける。

6.7.2

形式  形式は,次による。

<構成要素名句>  ::=  ITEM  <構成要素名>

<構成要素名>  ::=  <識別子>

6.7.3

構文規則  構文規則は,次による。

(1)

<構文要素名>は,それを含む<レコード型>中の他のどの<構成要素名>とも異ならなければなら

ない。

6.7.4

一般規則  一般規則は,次による。

(1)

<構成要素名句>は,それを含む<構成要素型>を指す<構成要素名>となる<識別子>を定義する。

6.8

<既定句>

6.8.1

機能  <構成要素型>に対して既定値を指定する。

6.8.2

形式  形式は,次による。

<既定句>  ::=

 DEFAULT

  <定数>

6.8.3

構文規則  構文規則は,次による。


19

X 3004 - 1987

(1)

<既定句>の主体<データ型>は,それを含む<構成要素型>の<データ型>とする。

(2)

<定数>は,次のとおりとする。

(a)

主体<データ型>が文字列値を定義するならば,<定数>は<文字列定数>でなければならない。

<文字列定数>の長さは,主体<データ型>の<長さ>の値より大きくてはならない。

(b)

主体<データ型>が真数値を定義するならば,<定数>は<真数定数>でなければならない。小数

点の右の有効けた数は,主体<データ型>の<位取り>より大きくてはならない。小数点の左の有

効けた数は,P−S より大きくてはならない。ここで P 及び S は,それぞれ主体<データ型>の<精

度>と<位取り>とする。

(c)

主体<データ型>が概数値を定義するならば,<定数>は<概数定数>又は<真数定数>でなけれ

ばならない。有効けた数を表すために必要とする二進けた数は,主体<データ型>の<精度>より

大きくてはならない。

6.8.4

一般規則  一般規則は,次による。

(1)

<既定句>を含む<レコード型>の実現値が<STORE 文>によって格納されるとき,その<既定句>

を含む<構成要素型>の実現値中に含まれる各データ項目の値は,次のとおりとする。

(a)

<定数>が<真数定数>ならば,その値は<定数>の真数値とする。

(b)

<定数>が<概数定数>ならば,その値は<定数>の概数値とする。

(c)

<定数>が<文字列定数>であり,<定数>の<長さ>が主体<データ型>の長さに等しいならば,

その値は<定数>とする。

(d)

<定数>が<文字列定数>であり,<定数>の長さが主体<データ型>の長さより短いならば,そ

の値は空白文字で主体構成要素の長さまで右側に拡張される<文字列定数>とする。

6.9

<レコード検査句>

6.9.1

機能  <レコード型>の実現値に対して正当性条件 (validity condition) を指定する。

6.9.2

形式  形式は,次による。

<レコード検査句>  ::=

 CHECK

  <条件>

6.9.3

構文規則  構文規則は,次による。

(1)

<条件>中の各<構成要素識別子>の該当<レコード型>は,<レコード検査句>を含む<レコード

型>とする。

6.9.4

一般規則  一般規則は,次による。

(1)

<レコード検査句>の<条件>がレコード実現値に対して評価されるとき,<条件>中の任意の<構

成要素識別子>に対して該当<データベースキー>は,そのレコード実現値の<データベースキー>

とする。

(2)

<条件>が

偽である<レコード型>のレコード実現値をデータベースが含むならば,<レコード検査

句>に関する違反となる。

6.10

<親子集合型>

6.10.1

機能  <親子集合型>を定義する。

6.10.2

形式  形式は,次による。

<親子集合型>  ::=

<親子集合名句>

<親レコード句>


20

X 3004 - 1987

<順序句>

<子レコード句>…

6.10.3

構文規則  構文規則は,次による。

なし。

6.10.4

一般規則  一般規則は,次による。

なし。

6.11

<親子集合名句>

6.11.1

機能  <親子集合型>に名前を付ける。

6.11.2

形式  形式は,次による。

<親子集合名句>  ::=

 SET

<親子集合名>

<親子集合名>  ::=

<識別子>

6.11.3

構文規則  構文規則は,次による。

(1)

<親子集合名>は,それを含む<スキーマ>中の他のどの<親子集合名句>の<親子集合名>とも異

ならなければならない。

6.11.4

一般規則  一般規則は,次による。

(1)

<親子集合名句>は,それを含む<親子集合型>を指す<親子集合名>となる<識別子>を定義する。

6.12

<親レコード句>

6.12.1

機能  <親子集合型>の親<レコード型>を指定する。

6.12.2

形式  形式は,次による。

<親レコード句>  ::=

 OWNER

  {<レコード名>|SYSTEM}

6.12.3

構文規則  構文規則は,次による。

(1)

<親レコード句>が<レコード名>を含むならば,その<レコード名>は,その<親レコード句>を

含む<スキーマ>中の<レコード型>を指さなければならない。

6.12.4

一般規則  一般規則は,次による。

(1)

<親レコード句>は,次のとおりとする。

(a)

<親レコード句>が<レコード名>を指定するならば,その<レコード名>はその<親レコード句

>を含む<親子集合型>の親<レコード名>とし,その<レコード名>で指される<レコード型>

はその<親子集合型>の親<レコード型>とする。

(b)

<親レコード句>が SYSTEM を指定するならば,その<親レコード句>を含む<親子集合型>はそ

の親<レコード型>として SYSTEM をもつ特異<親子集合型>とする。

6.13

<順序句>

6.13.1

機能  親子集合中の子レコードの順序を指定する。

6.13.2

形式  形式は,次による。

<順序句>  ::=

 ORDER

  <順序選択>

<順序選択>  ::=

 FIRST

|LAST


21

X 3004 - 1987

|NEXT

|PRIOR

|DEFAULT

|<整列順序>

<整列順序>  ::=

 SORTED

  {<レコード型順>|<順序重複>}

<レコード型順>  ::=

 RECORD

TYPE

  <レコード名>.

<順序重複>  ::=

 DUPLICATES

 {PROHIBITED

|FIRST

|LAST

|DEFAULT}

6.13.3

構文規則  構文規則は,次による。

(1)

<整列順序>を指定するならば,<キー句>は,<順序句>を含む<親子集合型>の各<子レコード

句>に含まれなければならない。そうでなければ,<順序句>を含む<親子集合型>のどの<子レコ

ード句>も<キー句>を含んではならない。

(2)

<レコード型順>を指定するならば,各<レコード名>は,それを含む<親子集合型>の子<レコー

ド型>を指さなければならず,その<順序句>を含む<親子集合型>の子<レコード型>を指すいず

れの<レコード名>も,<レコード型順>の中に丁度一度だけ現れなければならない。

(3)

<レコード型順>を含むならば,<順序句>を含む<親子集合型>中の各<子レコード句>の<キー

句>は,<レコード型キー項目>を含まなければならない。そうでなければ,そのようなどの<キー

句>も<レコード型キー項目>を含んではならない。

(4)

<順序重複>を指定するならば,<順序句>を含む<親子集合型>中のどの<子レコード句>の<キ

ー句>も<キー重複>を含んではならない。そうでなければ,<順序句>を含む<親子集合型>のい

ずれの<子レコード句>の各<キー句>も<キー重複>を含まなければならない(

1

)

(

1

)

<キー句>を扱う規則とともに,これは,重複キー項目をもつ親子集合の子レコードが,<順

序句>中の一つの<順序重複>か,又は各<子レコード句>の<キー重複>かによって制御さ

れることを保証する。

6.13.4

一般規則  一般規則は,次による。

(1)

<順序選択>が LAST 又は FIRST ならば,データベース制御システムは,それを含む<親子集合型>

の実現値の子レコードをそれぞれ発生順又は逆発生順に保守しなければならない。この発生順は,<

組入れ操作>がその親子集合実現値に子レコードを組み入れる最も新しい時に基づいている。同じ親

子集合実現値に子レコードを(再)組入れる<MODIFY 文>又は<RECONNECT 文>の結果から生じ

る<組入れ操作>は,LAST と FIRST に対して発生順の新しい位置を確立する。

(2)

<順序選択>が NEXT 又は PRIOR ならば,データベース制御システムは,<順序句>を含む<親子

集合型>の実現値の子レコードを,<組入れ操作>の対象<親子集合位置指示子>に含まれる<位置

>によって決定される順序で保持しなければならない。

(3)

<順序選択>が DEFAULT ならば,データベース制御システムは,<順序句>を含む<親子集合型>


22

X 3004 - 1987

の実現値の子レコードを,処理系作成者の定義による順序で保守しなければならない。この順序は,

トランザクション内では再生可能要求に従うが,トランザクション間では変更してもよい。

(4)

<整列順序>を指定するならば,データベース制御システムは,<順序句>を含む<親子集合型>の

実現値の子レコードを,各子レコードの整列制御キーに基づく順序で保守しなければならない。ここ

で,子レコードの整列制御キーは,<順序句>を含む<親子集合型>の対応する<子レコード句>の

<キー句>で指定されるキー項目の並びからなる。

(5)

<レコード型順>を指定するならば,<順序句>を含む<親子集合型>の子<レコード型>は,その

<順序句>を含む<親子集合型>の<子レコード句>の<キー句>で定義される整列制御キー中のキ

ー項目として使用される。<レコード型順>中の<レコード名>の並びは,<レコード型>の昇順を

指定し,<レコード型>の降順は,その並びの逆によって与えられる。

(6)

<順序重複>は,<順序句>を含む<親子集合型>の実現値が<組入れ操作>によって二つ以上の子

レコードがキー項目のすべてに対して等しい値をもつものを含むようになるとき,データベース制御

システムによってとられる動作を指定する。それは,次のとおりとする。

(a) PROHIBITED

を指定しているならば,<順序句>に関する違反となる。

(b) LAST

又は FIRST を指定しているならば,キー項目に対して等しい値をもつ子レコードは,それぞ

れ発生順又は逆発生順に並べられなければならない。この発生順は,<STORE 文>,<MODIFY

文>,<CONNECT 文>若しくは<RECONNECT 文>が親子集合実現値に与えられた子レコードを

組み入れ時点,又は,<MODIFY 文>が与えられた子レコード中の一つ以上のキー項目に対して値

を指定した最も新しい時点に基づいている。そのレコード中のキー項目に対して現在の値に等しい

その子レコード中の一つ以上のキー項目に対して値を指定する<MODIFY 文>は,<順序重複>

FIRST

又は LAST に対して発生順の新しい位置を確立する。

(c) DEFAULT

を指定しているならば,キー項目のすべてに対して等しい値をもつ子レコードは,処理

系作成者の定義による順序に並べられる(

2

)

(

2

)

<順序重複>が指定されないならば,とられるべき動作は,それを含む<親子集合型>の各<

子レコード句>の<キー重複>によって制御される。

6.14

<子レコード句>

6.14.1

機能  <親子集合型>の子<レコード型>を指定する。

6.14.2

形式  形式は,次による。

<子レコード句>  ::=

<子レコード名句>

<組入れ句>

<保存句>

[<子レコード一意性句>…]

[<キー句>]

[<子レコード検査句>…]

6.14.3

構文規則  構文規則は,次による。

なし。

6.14.4

一般規則  一般規則は,次による。

なし。

6.15

<子レコード名句>


23

X 3004 - 1987

6.15.1

機能  <親子集合型>の子<レコード型>のレコード名を指定する。

6.15.2

形式  形式は,次による。

<子レコード名句>  ::=

 MEMBER

  <レコード名>

6.15.3

構文規則  構文規則は,次による。

(1)

<レコード名>は,それを含む<スキーマ>中の<レコード型>を指さなければならない。

(2)

<レコード名>は,それを含む<親子集合型>中の他のどの子<レコード型>も指してはならない。

6.15.4

一般規則  一般規則は,次による。

(1)

<子レコード名句>は,<レコード名>によって指される<レコード型>がその<子レコード名句>

を含む<親子集合型>の子<レコード型>となり,かつ,その<子レコード名句>を含む<子レコー

ド句>の子<レコード型>となることを定義する。

6.16

<組入れ句>

6.16.1

機能  <親子集合型>の子<レコード型>の組入れ特性を定義する。

6.16.2

形式  形式は,次による。

<組入れ句>  ::=

 INSERTION

  <組入れモード>

<組入れモード>  ::=

 AUTOMATIC

|STRUCTURAL  <構造指定>

|MANUAL

<構造指定>  ::=

<構成要素識別子一致>

{AND  <構成要素識別子一致>}…]

<構成要素識別子一致>  ::=

<子レコード構成要素識別子>=<親レコード構成要素識別子>

|<親レコード構成要素識別子>=<子レコード構成要素識別子>

<子レコード構成要素識別子>  ::=

<構成要素識別子>

<親レコード構成要素識別子>  ::=

<構成要素識別子>

6.16.3

構文規則  構文規則は,次による。

(1)

<組入れ句>に STRUCTURAL を指定するならば,次のとおりとする。

(a)

<構成要素識別子>の<構成要素名>が配列を指すならば,その<構成要素識別子>は,<添字>

を含まなければならない。

(b)

その<親子集合型>は,特異<親子集合型>であってはならない。対象<レコード型>は,<子レ

コード名句>を含む<親子集合型>の親<レコード型>とする。主体<レコード型>は,<子レコ

ード名句>を含む<子レコード句>の子<レコード型>とする。

(c)

主体<レコード型>と対象<レコード型>が同じならば,<構成要素識別一致>中のいずれの<構

成要素識別子>も,OWNER 又は MEMBER を指定する<修飾子>を含まなければならない。

(d)

主体<レコード型>と対象<レコード型>との両方で定義される<構成要素名>を含む<構成要素

識別子一致>中の任意の<構成要素識別子>は,<修飾子>を含まなければならない。

(e)

<構成要素識別一致>中の<構成要素識別子>が<レコード名>を指定する<修飾子 (qualifier)>


24

X 3004 - 1987

を含むならば,<子レコード名句>を含む<レコード名>は,主体<レコード型>か,又は対象<

レコード型>のいずれかの<レコード名>でなければならず,<構成要素識別子>の該当<レコー

ド型>は,その<レコード型>とする。

(f)

<構成要素識別子一致>中の<構成要素識別子>が OWNER (MEMBER) を指定する<修飾子>を

含むならば,<構成要素識別子>の該当<レコード型>は,対象(主体)<レコード型>とする。

(g)

<構成要素識別子一致>中の<構成要素識別子>が<修飾子>を含まないならば,その<構成要素

識別子>の<構成要素名>は,対象<レコード型>中か,主体<レコード型>中のいずれかに定義

されていなければならず,<構成要素識別子>の該当<レコード型>は,その<レコード型>とす

る。

(h)

<親レコード構成要素識別子>によって参照されるデータ項目は,対象<レコード型>中の<レコ

ード一意性句>にある<構成要素識別子>でなければならない。

(i)

<子レコード構成要素識別子>によって参照されるデータ項目は,主体<レコード型>のデータ項

目でなければならない。<構成要素識別子一致>の<子レコード構成要素識別子>によって参照さ

れる<構成要素型>の<データ型>は,その<構成要素識別子致>の<親レコード構成要素識別子

>によって参照される<構成要素型>の<データ型>と一致しなければならない。

6.16.4

一般規則  一般規則は,次による。

(1) STRUCTURAL

が指定されたとき,M1,M2,…を<子レコード構成要素識別子>として指定される

<構成要素識別子>とする。それらの<構成要素識別子>の該当<データベースキー>は,新しい子

レコード実現値の<データベースキー>とする。O1,O2,…を<親レコード構成要素識別子>として
指定される<構成要素識別子>とする。それらの<構成要素識別子>の該当<データベースキー>は,

<組入れ操作>によって指定される親子集合実現値の親レコード実現値の<データベースキー>とす

る。暗黙的に次の形式<子レコード検査句>が強制される。

CHECK M1

=O1 AND M2=O2…

6.17

<保存句>

6.17.1

機能  <親子集合型>の子<レコード型>の保存特性を定義する。

6.17.2

形式  形式は,次による。

<保存句>  ::=

 RETENTION

{FIXED

| MANDATORY | OPTIONAL}

6.17.3

構文規則  構文規則は,次による。

なし。

6.17.4

一般規則  一般規則は,次による。

なし。

6.18

<子レコード一意性句>

6.18.1

機能  <親子集合型>の各実現値の子レコードに対して一意性制約を指定する。

6.18.2

形式  形式は,次による。

<子レコード一意性句>  ::=

 UNIQUE

  <構成要素識別子>…

6.18.3

構文規則  構文規則は,次による。

(1)

<構成要素識別子>の<構成要素名>が配列を指すならば,その<構成要素識別子>は,<添字>を

含まなければならない。


25

X 3004 - 1987

(2)

同じ<構成要素識別子>は,一つの<子レコード一意性句>に複数含まれてはならない。

(3)

<子レコード一意性句>の主体<レコード型>は,<子レコード名句>を含む<子レコード句>の子

<レコード型>とする。

<子レコード一意性句>中の各<構成要素識別子>の該当<レコード型>は,主体<レコード型>

とする。

6.18.4

一般規則  一般規則は,次による。

(1)

<子レコード一意性句>の<構成要素識別子>がレコード実現値に対して参照されるとき,それらの

<構成要素識別子>に対する該当<データベースキー>は,そのレコード実現値の<データベースキ

ー>とする。

(2)

データベースが<子レコード一意性句>を含む<親子集合型>の実現値を含み,その実現値が,第 1

のレコード実現値の<子レコード一意性句>中の<構成要素識別子>によって指される構成要素の各

値が,第 2 のレコード実現値の対応する構成要素の値に等しい主体<レコード型>の二つの子レコー

ド実現値を含むならば,<子レコード一意性句>に関する違反となる。

6.19

<キー句>

6.19.1

機能  整列される<親子集合型>の子<レコード型>に対して整列制御キーを定義する。

6.19.2

形式  形式は,次による。

<キー句>  ::=

 KEY

  <キー項目>…[<キー重複>]

<キー項目>  ::=

 {ASCENDING

|DESCENDING}

{<構成要素識別子>|<レコード型キー項目>}…

<レコード型キー項目>  ::= RECORD

TYPE

<キー重複>  ::=

 DUPLICATES

 {PROHIBITED

|FIRST

|LAST

|DEFAULT}

6.19.3

構文規則  構文規則は,次による。

(1)

<構成要素識別子>の<構成要素名>が配列を指すならば,その<構成要素識別子>は,<添字>を

含まなければならない。

(2)

同じ<構成要素識別子>は,一つの<キー句>に複数含まれてはならない。

(3)

<キー句>の主体<レコード型>は,その<キー句>を含む<子レコード句>の子<レコード型>と

する。

<キー句>中の各<構成要素識別子>の該当<レコード型>は,<キー句>の主体<レコード型>

とする。

(4)

<キー句>を含む<親子集合型>が<整列順序>を指定するならば,<キー句>を指定しなければな

らない。そうでなければ,<キー句>を指定してはならない。

(5)

<キー句>を含む<親子集合型>が<順序重複>をもつ<整列順序>を指定しないならば,<キー重

複>を指定しなければならない。そうでなければ,<キー重複>を指定してはならない(

3

)


26

X 3004 - 1987

(

3

)

<順序句>を扱う規則とともに,これは,重複キー項目をもつ親子集合の子レコードが<順序

句>中の一つの<順序重複>により制御されるか,又は各<子レコード句>の<キー重複>に

よって制御されることを保証する。

(6)

<キー句>を含む<親子集合型>が<レコード型順>をもつ<整列順序>を指定するならば,一つの

<キー句>は唯一の<レコード型キー項目>を含まなければならない。そうでなければ,<キー句>

は<レコード型キー項目>を含んではならない。

(7)

<キー句>で指定される<構成要素識別子>と<レコード型キー項目>は,その<キー句>を含む<

親子集合型>の子<レコード型>として主体<レコード型>に対する

整列制御キーを構成するキー項

目とする。キー項目の直前に ASCENDING 又は DESCENDING があるならば,キー項目の方向は,そ

れぞれ

昇順又は降順になるように定義される。キー項目 K の直前にキー項目 J があるならば,キー項

目 K の方向は,キー項目 J の方向となるように定義される。

(8)

どの<レコード型キー項目>も<キー句>で指定していないならば,その<キー句>中のすべてのキ

ー項目は,共通キー項目となるように定義される。そうでなければ,<キー句>の共通キー項目は,

<キー句>中のキー項目のもとの位置が<レコード型キー項目>のもとの位置よりも小さいキー項目

と<レコード型キー項目>になるように定義される。<親子集合型>の各<子レコード句>は,同じ

個数の共通キー項目を含まなければならない。<親子集合型>中の<子レコード句>の<キー句>中

の同じもとの位置にあるすべての共通キー項目は,同じ方向をもたなければならず,<レコード型キ

ー項目>とするか,又は,同一の<データ型>をもつ<構成要素型>を指しているかのいずれかでな

ければならない。

6.19.4

一般規則  一般規則は,次による。

(1)

<キー句>の<構成要素識別子>がレコード実現値に対して参照されるとき,それらの<構成要素識

別子>に対する該当<データベースキー>は,そのレコード実現値の<データベースキー>とする。

(2)

キー項目は,<キー句>で優先度の高い順番に宣言される。

(3)

キー項目の方向が

昇順であるか降順であるかに依存して,キー項目の値は,それぞれ最小から最大へ

又は最大から最小へと順序付けられる。

(4)

キー項目の順序は,次のとおりとする。

(a)

キー項目が<構成要素識別子>ならば,キー項目の方向が昇順か降順かに依存して,そのキー項目

の順序は,より小さいか,より大きいかの関係条件のいずれかによって定義される。

(b)

キー項目が<レコード型キー項目>ならば,そのキー項目の順序は,その<親子集合型>の<整列

順序>の<レコード型順>で指定される<レコード名>の並びによって定義される。

(5)

<キー重複>は,<STORE 文>,<MODIFY 文>,<CONNECT 文>又は<RECONNECT 文>の実

行によって,<キー句>を含む<親子集合型>の実現値がキー項目のすべてに対して等しい値をもつ

複数の子レコードを含むときにとられるべき動作を指定する。それは,次のとおりとする。

(a) PROHIBIT

を指定しているならば,<キー句>に関する違反となる。

(b)

キー項目の値が等しい複数の子レコードは,LAST 又は FIRST を指定しているならば,発生順又は

逆発生順に並べられる。この発生順は,<STORE 文>,<MODIFY 文>,<CONNECT 文>若し

くは<RECONNECT 文>が親子集合実現値に与えられた子レコードを組み入れた時点,又は,<

MODIFY

文>が与えられた子レコード中の一つ以上のキー項目に対して値を指定した最も新しい

時点に基づいている。その子レコード中のそれらのキー項目に対して現在の値に等しい子レコード

中の一つ以上のキー項目に対して値を指定する<MODIFY 文>は,発生順の新しい位置を確立する。


27

X 3004 - 1987

(c) DEFAULT

を指定しているならば,キー項目のすべてに対して等しい値をもつ子レコードは,処理

系作成者の定義による順序に並べられる。

<キー重複>を指定しないならば,とられるべき動作は,<キー句>を含む<親子集合型>の<

順序重複>によって制御される。

6.20

<子レコード検査句>

6.20.1

機能  <親子集合型>の各実現値の子レコードの正当性条件を指定する。

6.20.2

形式  形式は,次による。

<子レコード検査句>  ::=

 CHECK

  <条件>

6.20.3

構文規則  構文規則は,次による。

(1)

<子レコード検査句>の主体<レコード型>は,その<子レコード検査句>を含む<子レコード句>

の子<レコード型>とする。

<子レコード検査句>を含む<親子集合型>が特異<親子集合型>でないならば,<子レコード検

査句>の対象<レコード型>は,その<子レコード検査句>を含む<親子集合型>の親<レコード型

>とする。<子レコード検査句>を含む<親子集合型>が特異<親子集合型>ならば,<子レコード

検査句>は,対象<レコード型>をもたない。

(2)

主体<レコード型>と対象<レコード型>とが同じならば,<条件>中のすべての<構成要素識別子

>は,OWNER 又は MEMBER のいずれかを指定する<修飾子>を含まなければならない。

(3)

<子レコード検査句>の主体<レコード型>と対象<レコード型>との両方に定義される<構成要素

名>を含む<条件>中の任意の<構成要素識別子>は,<修飾子>を含まなければならない。

(4)

<修飾子>は,次のとおりとする。

(a)

<条件>中の<構成要素識別子>が<レコード名>を指定する<修飾子>を含むならば,その<レ

コード名>は主体<レコード型>か対象<レコード型>かのいずれかの<レコード名>でなければ

ならない。<構成要素識別子>の該当<レコード型>は,その<レコード型>とする。

(b)

<条件>中の<構成要素識別子>が OWNER を指定する<修飾子>を含むならば,<構成要素識別

子>は,

対象<レコード型>をもたなければならず,<構成要素識別子>の該当<レコード型>は,

その<レコード型>とする。

(c)

<条件>中の<構成要素識別子>が MEMBER を指定する<修飾子>を含むならば,<構成要素識

別子>の該当<レコード型>は,主体<レコード型>とする。

(d)

<条件>中の<構成要素識別子>が<修飾子>を含まないならば,その<構成要素識別子>の<構

成要素名>は,主体<レコード型>か対象<レコード型>かのいずれかで定義されていなければな

らない。<構成要素識別子>の該当<レコード型>は,その<レコード型>とする。

6.20.4

一般規則  一般規則は,次による。

(1)

<子レコード検査句>の<条件>が親子集合実現値に対して評価されるとき,<条件>の該当<レコ

ード型>が親子集合の親<レコード型>である<条件>中の<構成要素識別子>に対して該当<デー

タベースキー>は,その親子集合実現値の親レコード実現値の<データベースキー>とする。そして,

<条件>中の該当<レコード型>が親子集合の子<レコード型>である<条件>中の<構成要素識別

子>に対して該当<データベースキー>は,その親子集合実現値の子レコード実現値の<データベー

スキー>とする。

(2)

親レコードの実現値及びその親子集合実現値の子レコードである主体<レコード型>の任意の実現値


28

X 3004 - 1987

に関して評価したとき,<条件>が

偽となり,それを含む<親子集合型>のレコード実現値をデータ

ベースが含むならば,<子レコード検査句>に関する違反となる。

6.21

<構成要素識別子>

6.21.1

機能  構成要素又はデータ項目を参照する。

6.21.2

形式  形式は,次による。

<構成要素識別子>  ::=

<ドット形式構成要素識別子>

|<OF 形式構成要素識別子>

<ドット形式構成要素識別子>  ::=

[<修飾子>.

]<構成要素名>[<添字>]

<OF 形式構成要素識別子>  ::=

<構成要素名>[<添字>]

[OF  <修飾子>]

<修飾子>  ::=

<レコード名>

|OWNER

|MEMBER

6.21.3

構文規則  構文規則は,次による。

(1)

<構成要素識別子>の該当<レコード型>は,<添字>を直接含む生成記号の構文規則で規定される。

(2)

<構成要素識別子>が<修飾子>を含むならば,

(a)

<修飾子>が<レコード名>を含むならば,その<レコード名>は,該当<レコード型>を指さな

ければならない。

(b)

<修飾子>が OWNER を指定するならば,<構成要素識別子>は,<親子集合型>に含まれなけれ

ばならず,その<親子集合型>の親<レコード型>は,該当<レコード型>でなければならない。

(c)

<修飾子>が MEMBER を指定するならば,<構成要素識別子>は,<子レコード句>に含まれな

ければならず,その<子レコード句>の子<レコード名>は,該当<レコード型>を指さなければ

ならない。

(3)

<構成要素名>は,該当<レコード型>の<構成要素型>を指さなければならない。その<構成要素

型>は,主体<構成要素型>とする。

(4)

<構成要素識別子>が<添字>を含むならば,

(a)

主体<構成要素型>は,配列を定義しなければならない。

(b)

<添字>の該当<反復句>は,主体<構成要素型>に含まれる<反復句>とする。

(c)

<添字>中の各<オペランド>は,<定数>でなければならない。

6.21.4

一般規則  一般規則は,次による。

(1)

<構成要素識別子>の該当<データベースキー>は,<構成要素識別子>を直接含む生成記号の一般

規則で規定される。

(2)

<構成要素識別子>は,該当<データベースキー>によって参照されるレコード中のデータ項目又は

配列を次のとおりに参照する。

(a)

<構成要素識別子>の主体<構成要素>がデータ項目を定義するならば,<構成要素識別子>は,

そのデータ項目を参照する。

(b)

<構成要素識別子>の主体<構成要素型>が配列を定義し,<構成要素識別子>が<添字>を含ま


29

X 3004 - 1987

ないならば,<構成要素識別子>は配列を参照する。

(c)

<構成要素識別子>の主体<構成要素型>が配列を定義し,<構成要素識別子>が<添字>を含む

ならば,<構成要素識別子>は,配列中の i 番目のデータ項目を参照する。ここで,i は<添字>の

値とする。

7.

サブスキーマ定義言語

7.1

<サブスキーマ>

7.1.1

機能  データベースの利用者のビューを定義する。

7.1.2

形式  形式は,次による。

<サブスキーマ>  ::=

<サブスキーマ名句>

{<レコードビュー>|<親子集合ビュー>}…]

7.1.3

構文規則  構文規則は,次による。

なし。

7.1.4

一般規則  一般規則は,次による。

なし。

7.2

<サブスキーマ名句>

7.2.1

機能  <サブスキーマ>に名前を付ける。

7.2.2

形式  形式は,次による。

<サブスキーマ名句>  ::=

<ドット形式サブスキーマ名句>

|<OF 形式サブスキーマ名句>

<ドット形式サブスキーマ名句>  ::=

 SUBSCHEMA

  <スキーマ名>.<サブスキーマ名>

<OF 形式サブスキーマ名句>  ::=

 SUBSCHEMA

  <サブスキーマ名>  OF  <スキーマ名>

<サブスキーマ名>  ::=  <識別子>

7.2.3

構文規則  構文規則は,次による。

(1)

<スキーマ名>は,<サブスキーマ>と同じ環境中の<スキーマ>を指さなければならない。その<

スキーマ>は,<サブスキーマ>の主体<スキーマ>とする。環境の概念は,処理系作成者の定義に

よる。

(2)

<サブスキーマ>の<サブスキーマ名>は,同じ主体<スキーマ>をもつ他のどの<サブスキーマ>

の<サブスキーマ名>とも異ならなければならない。

7.2.4

一般規則  一般規則は,次による。

(1)

<サブスキーマ名句>は,主体<スキーマ>内のその<サブスキーマ名句>を含む<サブスキーマ>

を指す<サブスキーマ名>となる<識別子>を定義する。

7.3

<レコードビュー>

7.3.1

機能  <サブスキーマ>に含まれるべき<レコード型>を指定し,<サブスキーマ>内でそれを指

す<識別子>を宣言する。

7.3.2

形式  形式は,次による。


30

X 3004 - 1987

<レコードビュー>  ::=

 RECORD

  [<レコード再命名>]<レコードビュー名>

[<構成要素リスト>]

<レコード再命名>  ::=

<レコード名>  RENAMED

<レコードビュー名>  ::=

<識別子>

<構成要素リスト>  ::=

<構成要素ビュー>…|  ALL

7.3.3

構文規則  構文規則は,次による。

(1)

<レコード再命名>の指定は,次のとおりとする。

(a)

<レコード再命名>を指定するならば,<レコード名>は,主体<スキーマ>中の<レコード型>

を指さなければならない。その<レコード型>は,主体<レコード型>とする。

(b)

<レコード再命名>を省略するならば,<レコードビュー名>は,主体<スキーマ>中の<レコー

ド型>を指す<レコード名>でなければならない。その<レコード型>は,主体<レコード型>と

する。

(2)

<レコードビュー名>は,<レコードビュー>を含む<サブスキーマ>中の他のいずれの<レコード

ビュー>の<レコードビュー名>とも異ならなければならない。主体<レコード型>は,<レコード

ビュー>を含む<サブスキーマ>中の他のいずれの主体<レコード型>とも異ならなければならない。

(3) ALL

の<構成要素リスト>を指定するならば,それは,主体<レコード型>中のいずれの<構成要素

型>に対しても<構成要素ビュー>を含む<構成要素リスト>に等価である。ここで,<構成要素型

>に対応する<構成要素ビュー>は,<構成要素型>の<構成要素名>である<構成要素ビュー名>

を含み,決して<構成要素再命名>を含まない。

7.3.4

一般規則  一般規則は,次による。

(1)

<レコードビュー>は,主体<レコード型>を指す<レコードビュー名>である<識別子>を定義す

る。

7.4

<構成要素ビュー>

7.4.1

機能  <サブスキーマ>内に含まれるべき<構成要素型>を指定し,<サブスキーマ>内でそれを

指す<識別子>を宣言する。

7.4.2

形式  形式は,次による。

<構成要素ビュー>  ::=

 ITEM

  [<構成要素再命名>]<構成要素ビュー名>

<構成要素再命名>  ::=

<構成要素名>  RENAMED

<構成要素ビュー名>  ::=

<識別子>

7.4.3

構文規則  構文規則は,次による。

(1)

主体<レコード型>は,<構成要素ビュー>を含む<レコードビュー>の<レコードビュー名>によ

って指される<レコード型>とする。

(2)

<構成要素再命名>の指定は,次のとおりとする。


31

X 3004 - 1987

(a)

<構成要素再命名>を指定するならば,<構成要素名>は,主体<レコード型>に含まれる<構成

要素型>を指さなければならない。その<構成要素型>は,主体<構成要素型>とする。

(b)

<構成要素再命名>を省略するならば,<構成要素ビュー名>は,主体<レコード型>に含まれる

<構成要素型>を指す<構成要素名>でなければならない。その<構成要素型>は,主体<構成要

素型>とする。

(3)

<構成要素ビュー名>は,<構成要素ビュー>を含む<レコードビュー>中の他のいずれの<構成要

素ビュー>の<構成要素ビュー名>とも異ならなければならない。主体<構成要素型>は,<構成要

素ビュー>を含む<レコードビュー>中の他のいずれの<構成要素ビュー>の主体<構成要素型>と

も異ならなければならない。

7.4.4

一般規則  一般規則は,次による。

(1)

<構成要素ビュー>は,主体<構成要素型>を指す<構成要素ビュー名>である<識別子>を定義す

る。

7.5

<親子集合ビュー>

7.5.1

機能  <サブスキーマ>に含まれるべき<親子集合型>を指定し,<サブスキーマ>内でそれを指

す<識別子>を宣言する。

7.5.2

形式  形式は,次による。

<親子集合ビュー>  ::=

 SET

  [<親子集合再命名>]<親子集合ビュー名>

<親子集合再命名>  ::=

<親子集合名>  RENAMED

<親子集合ビュー名>  ::=

<識別子>

7.5.3

構文規則  構文規則は,次による。

(1)

<親子集合再命名>の指定は,次のとおりとする。

(a)

<親子集合再命名>を指定するならば,<親子集合名>は,主体<スキーマ>中の<親子集合型>

を指さなければならない。その<親子集合型>は,主体<親子集合型>とする。

(b)

<親子集合再命名>を省略するならば,<親子集合ビュー名>は,主体<スキーマ>中の<親子集

合型>を指す<親子集合名>でなければならない。その<親子集合型>は,主体<親子集合型>と

する。

(2)

<親子集合ビュー名>は,<親子集合ビュー>を含む<サブスキーマ>中の他のいずれの<親子集合

ビュー>の<親子集合ビュー名>とも異ならなければならない。主体<親子集合型>は,<親子集合

ビュー>を含む<サブスキーマ>中の他のいずれの<親子集合ビュー>の主体<親子集合型>とも異

ならなければならない。

(3)

主体<親子集合型>の親<レコード型>と少なくとも一つの子<レコード型>は,<親子集合ビュー

>を含む<サブスキーマ>の<レコードビュー>によって指されなければならない。

7.5.4

一般規則  一般規則は,次による。

(1)

<親子集合ビュー>は,主体<親子集合型>を指す<親子集合ビュー名>である<識別子>を定義す

る。

8.

モジュール言語


32

X 3004 - 1987

8.1

<モジュール>

8.1.1

機能  モジュールを定義する。

8.1.2

形式  形式は,次による。

<モジュール>  ::=

<モジュール名句>

<言語句>

<サブスキーマ指定>

[<一時親子集合指定群>]

<手続>…

<言語句>  ::=

 LANGUAGE

{COBOL

|FORTRAN|PASCAL|PLI}

<サブスキーマ指定>  ::=

<ドット形式サブスキーマ指定>

|<OF 形式サブスキーマ指定>

<ドット形式サブスキーマ指定>  ::=

 SUBSCHEMA

<スキーマ名>.<サブスキーマ名>

<OF 形式サブスキーマ指定>  ::=

 SUBSCHEMA

<サブスキーマ名>  OF  <スキーマ名>

8.1.3

構文規則  構文規則は,次による。

(1)

<スキーマ名>は,<モジュール>と同じ環境中の<スキーマ>を指さなければならない。その<ス

キーマ>は,<モジュール>の主体<スキーマ>とする。

(2)

<サブスキーマ名>は,<モジュール>と同じ環境中の<サブスキーマ>を指さなければならない。

その<サブスキーマ>の主体<スキーマ>は,<モジュール>の主体<スキーマ>でなければならな

い。その<サブスキーマ>は,<モジュール>の主体<サブスキーマ>とする。

8.1.4

一般規則  一般規則は,次による。

(1)

一つの<モジュール>は,実行時に一つの適用業務プログラムと結合されなければならない。一つの

適用業務プログラムは,高々一つの<モジュール>と結合されなければならない。

(2)

<モジュール>の<言語句>が COBOL(それぞれに FORTRAN,PASCAL,PLI)を指定し,その<

モジュール>中の<手続>の呼出しを実行する方法が標準 COBOL プログラム(それぞれに標準

FORTRAN

,標準 Pascal 又は標準 PL/I プログラム)でなければ,結果は規定しない。

(3)

最初にプログラムが<モジュール>中の<手続>の呼出しを実行する前に,初期<セション状態>を

構築し,その<セション状態>を<モジュール>中の任意の<手続>のそのプログラムによるいずれ

の呼出しにも関連付ける。

(4)

最後にプログラムが<モジュール>中の<手続>の呼出しを実行した後に,FINISH を指定する<

ROLLBACK

文>を実行し,その<モジュール>に結合されている<セション状態>を抹消する。

8.2

<モジュール名句>

8.2.1

機能  <モジュール>に名前を付ける。

8.2.2

形式  形式は,次による。

<モジュール名句>  ::=

 MODULE

  [<モジュール名>]


33

X 3004 - 1987

<モジュール名>  ::=  <識別子>

8.2.3

構文規則  構文規則は,次による。

(1)

<モジュール名句>は,同じ環境中の他のどの<モジュール>の<モジュール名>とも異ならなけれ

ばならない。環境の概念は,処理系作成者の定義による。

8.2.4

一般規則  一般規則は,次による。

(1)

<モジュール名句>は,環境中でその<モジュール名句>を含む<モジュール名>を指す<モジュー

ル名>である省略可能な<識別子>を定義する。

8.3

<一時親子集合指定群>

8.3.1

機能  一時親子集合を指定する。

8.3.2

形式  形式は,次による。

<一時親子集合指定群>  ::=

<一時親子集合指定>…

<一時親子集合指定>  ::=

 SET

  <親子集合ビュー名>

8.3.3

構文規則  構文規則は,次による。

(1)

各<一時親子集合指定>の<親子集合ビュー名>は,<一時親子集合指定群>を含む<モジュール>

中の他のどの<一時親子集合指定>の<親子集合ビュー名>とも異ならなければならない。そして,

主体<サブスキーマ>中のどの<親子集合ビュー>の<親子集合ビュー名>とも異ならなければなら

ない。

(2)

<親子集合ビュー名>S をもつ<一時親子集合指定>は,次のような暗黙的な<親子集合名句>,<

親レコード句>及び<順序句>をもつ一時的な<親子集合型>を定義する。

SET S OWNER SYSTEM ORDER LAST

更に,主体<サブスキーマ>中で指定される各<レコードビュー名>R に対して,次のような<子

レコード名句>,<組入れ句>及び<保存句>をもつ<子レコード句>を定義する。

MEMBER R INSERTION MANUAL RETENTION OPTIONAL

8.3.4

一般規則  一般規則は,次による。

(1)

<一時親子集合指定>の<親子集合ビュー名>は,<一時親子集合指定>によって定義される一時<

親子集合型>を指す。

8.4

<手続>

8.4.1

機能  手続を定義する。

8.4.2

形式  形式は,次による。

<手続>  ::=

 PROCEDURE

  <手続名>[<パラメタ宣言>…]

[<NDL 文>…]

<パラメタ宣言>  ::=

<パラメタ名><データ型>[<反復句>]

|RECORD

|STATUS

|TEST

<手続名>  ::=  <識別子>


34

X 3004 - 1987

<パラメタ名>  ::=

<識別子>

<NDL 文>  ::=

<COMMIT 文>

|<CONNECT 文>

|<DISCONNECT 文>

|<ERASE 文>

|<FIND 文>

|<GET 文>

|<MODIFY 文>

|<NULLIFY 文>

|<READY 文>

|<RECONNECT 文>

|<ROLLBACK 文>

|<STORE 文>

|<テスト文>

<テスト文>  ::=

<データベースキー等値テスト文>

|<データベースキーナルテスト文>

|<親子集合空テスト文>

|<親子関係テスト文>

8.4.3

構文規則  構文規則は,次による。

(1)

<手続名>は,それを含む<モジュール>中の他のどの<手続>の<手続名>とも異ならなければな

らない。

(2)

<手続>中の各<パラメタ宣言>の<パラメタ名>は,その<手続>中の他のどの<パラメタ宣言>

の<パラメタ名>とも異ならなければならない。

(3)

<手続>中の<NDL 文>に含まれるどの<パラメタ名>もその<手続>中で<パラメタ宣言>に指

定されなければならない。

(4)

<NDL 文>中の<構成要素ビュー識別子>中の<構成要素ビュー名>が<手続>中で指定される<

パラメタ名>と同一ならば,<構成要素ビュー識別子>は<レコードビュー名>を含まなければなら

ない。

(5)

各<NDL 文>中の各<レコードビュー名>によって指される<レコード型>は,主体<サブスキーマ

>で定義されなければならない。

(6)

各<NDL 文>中の各<親子集合ビュー名>によって指される<親子集合型>は,主体<サブスキーマ

>又はその<手続>を含む<モジュール>の<一時親子集合指定群>で定義されなければならない。

(7)

<手続>は,高々一つの RECORD<パラメタ宣言>,高々一つの STATUS<パラメタ宣言>及び高々

一つの TEST<パラメタ宣言>を含まなければならない。

(8)

<手続>は,高々一つの<テスト文>を含まなければならない。

(9)

<手続>が<テスト文>を含むならば,その<手続>は,一つの TEST<パラメタ宣言>を含まなけ

ればならない。<手続>が<テスト文>を含まないならば,それは,TEST<パラメタ宣言>を含んで

いてはならない。


35

X 3004 - 1987

(10)

<手続>は,高々一つの<NDL 文>である<COMMIT 文>又は<ROLLBACK 文>を含まなければな

らない。<手続>がこのような<NDL 文>を含むならば,それは,その<手続>中の最後の<NDL

文>でなければならない。

(11)

<手続>の妥当な呼出しは,n 個のパラメタを与えなければならない。ここで,n は,その<手続>中

の<パラメタ宣言>の個数とする。

(12)

<パラメタ宣言>の指定は,次のとおりとする。

(a)  i

番目の<パラメタ宣言>が<反復句>を含むならば,i 番目のパラメタは,同じデータ項目実現値

数をもつ配列でなければならない。

(b)  i

番目の<パラメタ宣言>が RECORD<パラメタ宣言>ならば,i 番目のパラメタの型は,長さ 18

の文字列の単一の実現値を定義しなければならない。

(c)  i

番目の<パラメタ宣言>が STATUS<パラメタ宣言>ならば,i 番目のパラメタの型は,長さ 5 の

文字列の単一の実現値を定義しなければならない。

(d)  i

番目の<パラメタ宣言>が TEST<パラメタ宣言>ならば,i 番目のパラメタの型は,長さ 1 の文

字列の単一の実現値を定義しなければならない。

(13)

<手続>の i 番目の<パラメタ>がそれぞれ RECORD,

STATUS

又は TEST<パラメタ宣言>ならば,

その<手続>の呼出しで与えられる i 番目のパラメタは,RECORD パラメタ,STATUS パラメタ又は

TEST

パラメタとして参照される。

(14)

<手続>の主体<言語句>は,その<手続>を含む<モジュール>の<言語句>とする。

(15)

主体<言語句>の指定によって,次のとおりとする。

(15.1)

主体<言語句>が COBOL を指定するならば,次のとおりとする。

(15.1.1)

<パラメタ宣言>中のどの<データ型>も CHARACTER 又は NUMERIC のいずれかを指定しな

ければならない。

(15.1.2)  i

番目の<パラメタ宣言>がある<長さ>L に対して CHARACTER L である<データ型>を指定

するならば,i 番目のパラメタの型は,L の長さをもつ COBOL の英数字でなければならない。

(15.1.3)  i

番目の<パラメタ宣言>がある<精度>P 及び<位取り>S に対して NUMERIC P S である<デ

ータ型>を指定するならば,i 番目のパラメタの型は,COBOL の用途が DISPLAY であり符号が

LEADING SEPARATE

をもち,かつ,次の PICTURE でなければならない。

(a)  S

>P ならば,1 個の “S” ,1 個の “V” ,S-P 個の “P” ,P 個の “9” が続く PICTURE

(b)  S

=P ならば,1 個の “S” ,1 個の “V” ,P 個の “9” が続く PICTURE

(c)  P

>S>0 ならば,1 個の “S” ,P-S 個の “9” ,1 個の “V” ,S 個の “9” が続く PICTURE

(d)  S

=0 ならば,1 個の “S” ,P 個の “9” ,1 個の “V” が続く PICTURE (e) S<0 ならば,1 個の “S” ,

P

個の “9” ,abs (S)  個の “P” が続く PICTURE

(15.2)

主体<言語句>が FORTRAN を指定するならば,次のとおりとする。

(15.2.1)

<パラメタ宣言>中のどの<データ型>も CHARACTER,INTEGER,REAL 又は DOUBLE

PRECISION

のいずれかを指定しなければならない。

(15.2.2)  i

番目の<パラメタ宣言>がある<長さ>L に対して CHARACTER L である<データ型>を指定

するならば,i 番目のパラメタの型は,L の長さをもつ FORTRAN の CHARACTER でなければなら

ない。

(15.2.3)  i

番目の<パラメタ宣言>が INTEGER,REAL 又は DOUBLE PRECISION の<データ型>を指定

するならば,i 番目のパラメタの型は,それぞれ,FORTRAN の INTEGER,REAL 又は DOUBLE


36

X 3004 - 1987

PRECISION

でなければならない。

(15.3)

主体<言語句>が PASCAL を指定するならば,次のとおりとする。

(15.3.1)

<パラメタ宣言>中のどの<データ型>も CHARACTER,INTEGER 又は REAL のいずれかを指

定しなければならない。

(15.3.2)  i

番目の<パラメタ宣言>がある<長さ>L に対して CHARACTER L である<データ型>を指定

するならば,i 番目のパラメタの型は,L の長さをもつ Pascal の文字列でなければならない。

(15.3.3)  i

番目の<パラメタ宣言>が INTEGER 又は REAL の<データ型>を指定するならば,i 番目のパ

ラメタの型は,それぞれ Pascal の INTEGER 又は REAL でなければならない。

(15.4)

主体<言語句>が PLI を指定するならば,次のとおりとする。

(15.4.1)

<パラメタ宣言>中のどの<データ型>も CHARACTER,FIXED 又は FLOAT のいずれかを指定

しなければならない。

(15.4.2)  i

番目の<パラメタ宣言>がある<長さ>L に対して CHARACTER L である<データ型>を指定

するならば,i 番目のパラメタの型は,L の長さをもつ PL/I の CHARACTER でなければならない。

(15.4.3)  i

番目の<パラメタ宣言>がある<精度>P 及び<位取り>S に対して FIXED P S である<データ

型>を指定するならば,i番目のパラメタの型は PL/I の FIXED REAL DECIMAL (P, S)  でなければな

らない。

(15.4.4)  i

番目の<パラメタ宣言>がある<精度>P に対して FLOAT P である<データ型>を指定するな

らば,i 番目のパラメタの型は,PL/I の FLOAT REAL BINARY (P)  でなければならない。

8.4.4

一般規則  一般規則は,次による。

(1)

<手続>は,処理系作成者の定義する方法によって呼び出される手続を定義する。

(2)

<手続>がプログラムによって呼び出されるとき,

(2.1)

トランザクションがそのプログラムに対して活動していないならばトランザクションを開始する。

そして,そのプログラムがそのトランザクションを終了させるまでこの呼出しと後続の呼出しとを

このトランザクションと結合する。これらの呼出しは,この呼出しで呼び出された手続を含む<モ

ジュール>に含まれるどの<手続>であってもよい。

(2.2)

<手続>が一つ以上の<NDL 文>のリストを含むならば,そのリスト中の各<NDL 文>を左から

右へ,各<NDL 文>の一般規則に規定されるように実行する。

(3)

<手続>中の<パラメタ宣言>の<パラメタ名>は,<手続>中のその<パラメタ宣言>を指す。

(4)

<手続>中の任意の<NDL 文>の実行がデッドロックのために完了できないならば,

手続:デッドロ

ックが発生したの例外を発生させる。

(5)

<手続>中の<NDL 文>の実行の結果は,次のとおりとする。

(5.1)

<手続>中のどの<NDL 文>の実行の間にも例外が発生しなければ,次のとおりとする。

(5.1.1)

<手続>が STATUS<パラメタ宣言>を含むならば,STATUS パラメタの値を“13.

状態コード”中

手続:正常に対して指定される値に設定する。

(5.1.2)

<手続>が RECORD<パラメタ宣言>を含むならば,次のとおりとする。

(a)

<セション位置指示子>の<データベースキー>が

ナルでなければ,RECORD パラメタの値をその

<データベースキー>によって参照されるレコードの<レコード型>を示す<レコードビュー名>

に設定する。

(b)

<セション位置指示子>の<データベースキー>が

ナルならば,RECORD パラメタの値をすべて空

白文字に設定する。


37

X 3004 - 1987

(5.2)

<手続>中の任意の<NDL 文>の実行の間に例外が発生するならば,次のとおりとする。

(5.2.1)

<手続>の実行によりデータベースに対してなされたすべての変更を無効にする。

(5.2.2)

<手続>の実行により<セション状態>に対してなされたすべての変更を無効にする。

(5.2.3)

<手続>が STATUS<パラメタ宣言>を含むならば,STATUS パラメタの値を,

12.

状態コード”中

の例外に対して指定される値を設定する。

(5.2.4)

<手続>が TEST<パラメタ宣言>を含むならば,TEST パラメタの値を “0” に設定する。

9.

データ操作言語

9.1

COMMIT 文>

9.1.1

機能  コミットで現行トランザクションを終了させる。

9.1.2

形式  形式は,次による。

<COMMIT 文>  ::=

 COMMIT

[FINISH]

9.1.3

構文規則  構文規則は,次による。

なし。

9.1.4

一般規則  一般規則は,次による。

(1)

現行トランザクションを終了させる。

(2)

現行トランザクションによってなされたすべてのデータベースの変更を,同時実行中のセションに利

用可能にする。

(3)

<一時親子集合群>中の各<一時親子集合>に対して,その親子集合の親子関係から各子レコードを

切り離す。

(4)

主体<サブスキーマ>に対して,<位置指示子群>を初期<位置指示子群>に設定する。

(5) FINISH

を指定すると,<準備リスト>を

空にする。

9.2

CONNECT 文>

9.2.1

機能  親子集合中にレコード実現値の親子関係を確立する。

9.2.2

形式  形式は,次による。

<CONNECT 文>  ::=

 CONNECT

<データベースキー識別子>TO<親子集合ビュー名>

9.2.3

構文規則  構文規則は,次による。

(1)

適正な<レコード型>は,<親子集合ビュー名>で指される<親子集合型>の子<レコード型>とし

て定義され,更にその<親子集合型>で<組入れ句>に MANUAL と指定しているか,<保存句>に

OPTIONAL

と指定している<レコード型>とする。

(2)

<データベースキー識別子>が<レコードビュー名>を指定するならば,その<レコードビュー名>

は,適正な<レコード型>を指さなければならない。

9.2.4

一般規則  一般規則は,次による。

(1)

対象<データベースキー>は,<データベースキー識別子>によって参照される<データベースキー

>とする。その<データベースキー>が

ナルならば,CONNECT:データベースキーはナルであるの

例外を発生させる。

対象<レコード型>は,対象<データベースキー>によって参照される<レコード型>とする。

(2)

対象<レコード型>は,<レコードビュー名>が,UPDATE の<アクセス目的 (access intent)>をもつ


38

X 3004 - 1987

<準備リスト>中の<準備指定>を指さないならば,CONNECT

:レコードは更新用として準備され

ていないの例外を発生させる。

(3)

対象<レコード型>が適正な<レコード型>でないならば,CONNECT

:不適正なレコード型である

の例外を発生させる。

(4)

<組入れ操作>は,次のとおりに実行する。対象<データベースキー>を<組入れレコード>とし,

<CONNECT 文>の<親子集合ビュー名>を<組入れ親子集合型>とし,<CONNECT 文>の<親子

集合ビュー名>によって指される<親子集合位置指示子>の<親レコード>の<データベースキー>

を<組入れ親子集合親レコード>とし,そして

更新を<組入れ用位置指示子処置>とする。

9.3

DISCONNECT 文>

9.3.1

機能  指定される<親子集合型>の親子関係からレコードを切り離す。

9.3.2

形式  形式は,次による。

<DISCONNECT 文>  ::=

 DISCONNECT

  <データベースキー識別子>  FROM  <親子集合ビュー名>

9.3.3

構文規則  構文規則は,次による。

(1)

適正な<レコード型>は,<親子集合ビュー名>で指される<親子集合型>の子<レコード型>とし

て定義され,更にその<親子集合型>で<保存句>に OPTIONAL と指定している<レコード型>とす

る。

(2)

<データベースキー識別子>が<レコードビュー名>を指定するならば,その<レコードビュー名>

は,適正な<レコード型>を指さなければならない。

9.3.4

一般規則  一般規則は,次による。

(1)

対象<データベースキー>は,<データベースキー識別子>によって参照される<データベースキー

>とする。その<データベースキー>が

ナルならば,DISCONNECT:データベースキーはナルであ

るの例外を発生させる。

対象<レコード型>は,対象<データベースキー>により参照される<レコード型>とする。

(2)

対象<レコード型>の<レコードビュー名>が UPDATE の<アクセス目的>をもつ<準備リスト>

中の<準備指定>を指定しないならば,DISCONNECT

:レコードは更新用として準備されていない

の例外を発生させる。

(3)

対象<レコード型>が適正な<レコード型>でないならば,DISCONNECT

:不適正なレコード型で

あるの例外を発生させる。

(4)

対象<データベースキー>を<切離しレコード>とし,<DISCONNECT 文>の<親子集合ビュー名

>を<切離し親子集合型>として,<切離し操作>を実行する。

9.4

ERASE 文>

9.4.1

機能  データベースから一つ以上のレコードを取り去る。

9.4.2

形式  形式は,次による。

<ERASE 文>  ::=

 ERASE

  <データベースキー識別子>  WITH  <波及指定>

<波及指定>  ::=

 FULL

CASCADE

|PARTIAL CASCADE

9.4.3

構文規則  構文規則は,次による。

なし。


39

X 3004 - 1987

9.4.4

一般規則  一般規則は,次による。

(1)

対象<データベースキー>は,<データベースキー識別子>によって参照される<データベースキー

>とする。<データベースキー>が

ナルならば,ERASE:データベースキーがナルであるの例外を発

生させる。

対象レコードは,対象<データベースキー>によって参照されるレコードとする。

対象<レコード型>は,対象レコードの<レコード型>とする。

(2)

対象<レコード型>の<レコードビュー名>が UPDATE の<アクセス目的>をもつ<準備リスト>

中の<準備指定>を指さないならば,ERASE

:レコードは更新用として準備されていないの例外を発

生させる。

(3)

対象レコードが現在,子レコードとなっている各<親子集合型>に対して,<切離しレコード>を対

象<データベースキー>とし,<切離し親子集合型>を<親子集合型>の<親子集合名>として,<

切離し操作>を実行する。

(4)

影響を受ける親子集合は,対象レコードを親レコードとする親子集合とする。影響を受けるレコード

は,一つ以上の影響を受ける親子集合の子レコードとする。

(5)

<波及指定 (cascade specification)>の結果は,次のとおりとする。

(5.1)

<波及指定>が FULL CASCADE を指定するならば,すべての影響を受けるレコードを消去する。

(5.2)

<波及指定>が PARTIAL CASCADE を指定するならば,次のとおりとする。

(a)

影響を受ける親子集合が準固定子レコードを含むならば,ERASE

:親子集合が準固定子レコードを

もつの例外を発生させる。

(b)

影響を受ける親子集合の固定子レコードを消去する。

(c)

影響を受ける親子集合の任意子レコードに対し,影響を受けるレコードの<データベースキー>を

<切離しレコード>とし,影響を受ける親子集合の<親子集合型>の<親子集合名>を<切離し親

子集合型>として,<切離し操作>を実行する。

(6)

対象レコードを消去する。処理系作成者の定義による順序基準のもとでは,他のレコード実現値の相

対順序は変わらない。

(7)

<セション位置指示子>の<データベースキー>が対象レコードの<データベースキー>に等しいな

らば,<セション位置指示子>を

ナルに設定する。

<レコード位置指示子>の<データベースキー>が対象レコードの<データベースキー>に等しい

ならば,その<レコード位置指示子>の<データベースキー>を

ナルに設定する。

対象レコードの<データベースキー>がいずれかの<親子集合位置指示子>の<親レコード>に等

しいならば,<親レコード>とその<親子集合位置指示子>の<位置>の両方を

ナルに設定する。

(8)

各消去されるレコードに対し,あたかもそれが対象レコードであるかのように<ERASE 文>の一般規

(3)(8)を適用する。

9.5

FIND 文>

9.5.1

機能  データベース中のレコードを選択する。

9.5.2

形式  形式は,次による。

<FIND 文>  ::=

 FIND

<位置決め指定>

[<位置決め目的>]


40

X 3004 - 1987

[<位置決め用位置指示子処置>]

<位置決め指定>  ::=

<データベースキー識別子>

|<探索指定>

<探索指定>  ::=

<探索方向>

<域指定>

[WHERE<条件>]

<探索方向>  ::=

 FIRST

|LAST|NEXT|PRIOR|

|{ABSOLUTE|RELATIVE}<符号付き整数>

<域指定>  ::=

<レコード型域>

|<親子集合域>

|<サブスキーマ域>

<レコード型域>  ::=

<レコードビュー名>

<親子集合域>  ::=

[<レコードビュー名>]  IN  <親子集合ビュー名>

<サブスキーマ域>  ::=

 SUBSCHEMA

RECORD

<位置決め目的>  ::=

 FOR

{RETRIEVE

|UPDATE}

<位置決め用位置指示子>  ::=

 RETAIN

ALL

|<位置決め処置>

<位置決め処置>  ::=

[<子レコード扱い>]

[<位置決め保存>]

<子レコード扱い>  ::=

 AS

MEMBER

<親子集合ビュー名>…

<位置決め保存>  ::=

 RETAIN

RECORD

|RETAIN SET<親子集合ビュー名>…

|RETAIN RECORD SET<親子集合ビュー名>…

9.5.3

構文規則  構文規則は,次による。

(1)

<位置決め指定>が<探索指定>ならば,次のとおりとする。

(1.1)

<探索方向>が<符号付き整数>を含むならば,その<符号付き整数>は,0 であってはならない。

(1.2)

<域指定>によって,次のとおりとする。

(1.2.1)

<域指定>が<レコード型域>ならば,<探索指定>の対象<レコード型>は,<域指定>に含ま


41

X 3004 - 1987

れる<レコードビュー名>によって指される<レコード型>とする。

(1.2.2)

<域指定>が<親子集合域>ならば,次のとおりとする。

(a)

<域指定>の対象<親子集合型>は,<親子集合ビュー名>によって指される<親子集合型>とす

る。

(b)

<探索指定>が WHERE<条件>を含み,対象<親子集合>が複数の子<レコード型>を含むなら

ば,<親子集合型域>は,<レコードビュー名>を指定しなければならない。

<親子集合域>が<レコードビュー名>を指定するならば,<レコードビュー名>によって指さ

れる<レコード型>は,対象<親子集合型>の子<レコード型>でなければならない。その<レコ

ード型>は,<探索指定>の対象<レコード型>とする。

<親子集合域>が<レコードビュー名>を指定しないならば,<探索指定>の対象<レコード型

>は,対象<親子集合型>の子<レコード型>であるすべてのサブスキーマ<レコード型>とする。

(1.2.3)

<域指定>が<サブスキーマ域>ならば,次のとおりとする。

(a)

<探索指定>の対象<レコード型>は,主体<サブスキーマ>の<レコードビュー>によって指定

される<レコード型>とする。

(b)

<探索指定>が WHERE<条件>を含むならば,主体<サブスキーマ>は,唯一の<レコードビュ

ー>を含まなければならない。

(1.3)

<探索指定>が WHERE<条件>を含むならば,<条件>中の各<構成要素ビュー識別子>の該当

<レコード型>は,対象<レコード型>とする。

(2)

<位置決め用位置指示子処置(find cursor disposition)>に含まれるいずれの<親子集合ビュー名>もそ

の<位置決め用位置指示子処置>内の他のいずれの<親子集合ビュー名>とも異ならなければならな

い。

(3)

<子レコード扱い(position member)>に含まれる<親子集合ビュー名>は,その親<レコード型>に等

しい子<レコード型>をもつ<親子集合型>を指さなければならない。

(4)

<位置決め目的>が省略されるならば,FOR RETRIEVAL を想定する。

9.5.4

一般規則  一般規則は,次による。

(1)

<位置決め指定>によって,次のとおりに決定されるデータベース中の特定のレコード実現値を位置

決めする。

(1.1)

<位置決め指定>が<データベースキー識別子>ならば,

(1.1.1)

対象<データベースキー>は,<データベースキー識別子>によって参照される<データベースキ

ー>とする。

(1.1.2)

対象<データベースキー>が

ナルならば,FIND:データベースキーはナルであるの例外を発生させ

る。

(1.1.3)

対象<データベースキー>によって参照されるレコードを選択する。

(1.2)

<位置決め指定>が<探索指定>ならば,

(1.2.1)

<域指定>によって,次のとおりとする。

(1.2.1.1)

<域指定>が<レコード型域>ならば,<探索指定>の域は,<探索指定>の対象<レコード型

>のすべてのレコード実現値からなる。域中でのレコード実現値の順序は,処理系作成者の定義に

よる。この順序は,トランザクション内再生可能要求に従うが,トランザクション間では異なって

もよい。<探索指定>の対象位置は,<レコードビュー名>によって指される<レコードビュー名

指示子>の<データベースキー>とする。


42

X 3004 - 1987

(1.2.1.2)

<域指定>が<親子集合域>ならば,次のとおりとする。

(a)

<親子集合域>の対象<親子集合位置指示子>は,<親子集合ビュー名>で指される<親子集合位

置指示子>とする。

(b)

対象<親子集合型>が特異ならば,<親子集合域>の対象親子集合は,データベース中の対象<親

子集合型>の唯一の実現値とする。

対象<親子集合型>が特異でないならば,<親子集合域>の対象親子集合は対象<親子集合位置

指示子>の<親レコード>の<データベースキー>によって参照される親子集合とする。その<デ

ータベースキー>が

ナルならば,FIND:データベースキーはナルであるの例外を発生させる。

(c)

<探索指定>の域は,対象親子集合の子レコードであるすべてのレコード実現値からなる。域中の

レコード実現値の順序は,対象<親子集合型>に対する順序基準によって決定される。

(d)

<探索指定>の対象位置は,対象<親子集合位置指示子>の<位置>とする。

(1.2.1.3)

<域指定>が<サブスキーマ域>ならば,<探索指定>の域は,対象<レコード型>のすべての

レコード実現値からなる。域中のレコード実現値の順序は,処理系作成者の定義による。この順序

は,トランザクション内では再生可能要求に従うが,トランザクション間では異なってもよい。

<探索指定>の対象位置は,<セション位置指示子>の<データベースキー>とする。

(1.2.2)

<探索方向>が<符号付き整数>を含むとき,i をその<符号付き整数>の値とする。<探索方向>

が FIRST 又は NEXT を指定するならば,i を+1 とする。<探索方向>が LAST 又は PRIOR を指定

するならば,i を−1 とする。

(1.2.3) NEXT

,PRIOR 又は RELATIVE が指定され,i の値が正(負)ならば,次のとおりとする。

(1.2.3.1)

対象位置が

ナルでない単一の<データベースキー>ならば,その<データベースキー>で参照さ

れるレコード,及びそのレコードの前(後)に位置するすべてのレコード実現値を域から除く。

(1.2.3.2)

対象位置が対の<データベースキー>で,2 番目(1 番目)の<データベースキー>が

ナルでない

ならば,その<データベースキー>で参照されるレコードの前(後)に位置するすべてのレコード

実現値を域から除く。

(1.2.3.3)

対象位置が対の<データベースキー>で,

2

番目

(1 番目)

の<データベースキー>が

ナルならば,

すべてのレコード実現値を域から除く。

(1.2.4)

<レコードビュー名>を含む<親子集合域>が指定されるなら,対象<レコード型>以外のすべて

のレコード実現値を域から除く。

(1.2.5)

<探索指定>が<条件>を含むならば,域中の各レコード実現値に対して,次のとおりとする。

(1.2.5.1)

<条件>中の各<構成要素ビュー識別子>の該当<データベースキー>は,レコード実現値の<

データベースキー>とする。

(1.2.5.2)

レコード実現値に対して,その<条件>を評価する。

(1.2.5.3)

<条件>が

偽ならば,レコード実現値を域から除く。

(1.2.6) n

を域中の残っているレコード実現値の数とする。i の値が正ならば j を i とする。そうでなければ

j

を n+i+1 とする。

j

が 1 以上 n 以下ならば,域の j 番目のレコード実現値を選択する。そうでなければ,FIND

:レ

コードが見つからなかったの例外を発生させる。

(2)

選択されたレコードの<レコードビュー名>が<準備リスト>中の<準備指定>を指さないならば,

FIND

:レコードが準備されていないの例外を発生させる。その<準備指定>の<アクセス目的>が

RETRIEVE

で<位置決め目的>が UPDATE を指定するならば,FIND

:レコードが更新用として準備


43

X 3004 - 1987

されていないの例外を発生させる。

(3)

<セション位置指示子>の<データベースキー>を選択させたレコードの<データベースキー>とす

る。

(4)

<位置決め用位置指示子処置>が ALL も RECORD のいずれも指定しないならば,選択されたレコー

ドの<レコードビュー名>によって指される<レコード位置指示子>の<データベースキー>を選択

されたレコードの<データベースキー>とする。

(5)

<位置決め用位置指示子処置>が ALL を指定しないならば,<位置決め用位置指示子処置>中の<位

置決め保存>に指定されていない<親子集合ビュー名>の各<親子集合位置指示子>に対して,次の

とおりとする。

(5.1)

選択されたレコードの<レコード型>が<親子集合位置指示子>の<親子集合型>の親<レコード

型>であり,<親子集合位置指示子>を指す<親子集合ビュー名>が,<子レコード扱い>に指定

されないならば,その<親子集合位置指示子>の<親レコード>を選択されたレコードの<データ

ベースキー>に設定し,その<親子集合位置指示子>の<親子集合位置指示子>の<位置>を

ナル

に設定する。

(5.2)

<親子集合位置指示子>の<親子集合ビュー名>が<子レコード扱い>で指定され,選択されたレ

コードがその<親子集合ビュー名>によって指される<親子集合型>のどの親子集合実現値の子レ

コードでもないならば,FIND

:レコードが見つからなかったの例外を発生させる。

(5.3)

選択されたレコードが<親子集合位置指示子>の<親子集合ビュー名>によって指される<親子集

合型>の親子集合実現値の子レコードであるとき,選択されたレコードの<レコード型>が,その

<親子集合型>の親<レコード型>でないか,又は<親子集合位置指示子>の<親子集合ビュー名

>が<子レコード扱い>に指定されるかのどちらかならば,次のとおりとする。

(5.3.1)

<親子集合位置指示子>の<位置>を選択されたレコードの<データベースキー>に設定する。

(5.3.2)

その<親子集合型>が特異<親子集合型>でないならば,<親子集合位置指示子>の<親レコード

>を,その親子集合実現値の親レコード実現値の<データベースキー>に設定する。

(5.4)

そうでなければ,<親子集合位置指示子>を更新しない。

9.6

GET 文>

9.6.1

機能  パラメタの値を選択されるレコード実現値の構成要素の値に設定する。

9.6.2

形式  形式は,次による。

<GET 文>  ::=

 GET

  <パラメタ転送>

9.6.3

構文規則  構文規則は,次による。

なし。

9.6.4

一般規則  一般規則は,次による。

(1)

対象レコードは,<パラメタ転送>の<レコードビュー名>によって指される<レコード位置指示子

>の<データベースキー>で参照されるレコードとする。その<データベースキー>が

ナルならば,

GET

:レコード位置指示子はナルであるの例外を発生させる。

(2)

<パラメタ転送句>中の各<構成要素ビュー識別子>の該当<データベースキー>は,対象レコード

の<データベースキー>とする。

(3)

<パラメタ転送>中のすべての<オペランド>を評価する。

(4)

<パラメタ転送>中の各<パラメタ転送句>に対して,左から右へ,次のとおり実行する。


44

X 3004 - 1987

(a)

<パラメタ転送句>によって指定されるデータ転送を実行する。

(b)

<パラメタ転送句>に対してデータ転送を実行中に,例外が発生するならば,その<パラメタ転送

句>によって指されるパラメタに値を代入せず,<パラメタ転送>の後続するどの<パラメタ転送

句>も実行せず,実行されている前の<パラメタ転送句>の効果を保持する。

(5)

<セション位置指示子>の<データベースキー>を対象レコードの<データベースキー>に設定する。

9.7

MODIFY 文>

9.7.1

機能  レコード実現値中の一つ以上のデータ項目の内容を置き換える。

9.7.2

形式  形式は,次による。

<MODIFY 文>  ::=

 MODIFY

  <データベース転送>

9.7.3

構文規則  構文規則は,次による。

なし。

9.7.4

一般規則  一般規則は,次による。

(1)

対象<レコードビュー名>は,<データベース転送>の<レコードビュー名>とする。対象<レコー

ド型>は,対象<レコードビュー名>によって指される<レコード型>とする。

(2)

対象<レコードビュー名>が UPDATE の<アクセス目的>をもつ<準備リスト>中の<準備指定>

を指さないならば,MODIFY

:レコードが更新用に準備されていないの例外を発生させる。

(3)

対象レコードは,対象<レコードビュー名>で指される<レコード位置指示子>の<データベースキ

ー>によって参照されるレコードとする。その<データベースキー>が

ナルならば,MODIFY:レコ

ード位置指示子はナルであるの例外を発生させる。

(4)

変更されるデータ項目は,<データベース転送>の目標識別子中の<構成要素ビュー識別子>によっ

て指される任意のデータ項目とする。

(5)

<データベース転送>中の各<構成要素ビュー識別子>の該当<データベースキー>は,対象レコー

ドの<データベースキー>とする。

(6)

<データベース転送>中のすべての<オペランド>を評価する。

(7)

<データベース転送>中の各<データベース転送句>に対して,<データベース転送>中の各<デー

タベース転送句>によって指定されるデータ転送を実行する。

(8)

対象<レコード型>が子<レコード型>である各<親子集合型>に対して,対象<子レコード句>を

子<レコード型>が対象<レコード型>であるその<親子集合型>の<子レコード句>とする。対象

<子レコード句>の<組入れ句>が STRUCTURAL を指定し,かつ変更されるデータ項目が,その<

組入れ句>中の<子レコード構成要素識別子>として指定されている<構成要素識別子>によって参

照されるならば,次のとおりとする。

(8.1)

対象レコードの<データベースキー>を<切離しレコード>とし,<親子集合型>の<親子集合ビ

ュー名>を<切離し親子集合型>として,<切離し操作>を実行する。

(8.2)  D

を<親子集合型>の親<レコードビュー名>によって指される<レコード型>の実現値のデータ

ベースキーとする。ここでこの<親子集合型>は,<組入れ句>の<構成要素識別子一致>の<親

レコード構成要素識別子>によって参照される各データ項目に対し対象レコード中のデータ項目の

値に等しい値をもつものとする。ここで,更にこの対象レコードは,<構成要素識別子一致>の<

子レコード構成要素識別子>によって参照されるものとする。そのようなレコード実現値が存在し

ないならば,MODIFY

:親子集合組入れに際し構成要素一致が図れなかったの例外を発生させる。


45

X 3004 - 1987

(8.3)

対象レコードの<データベースキー>を<組入れレコード>とし,<親子集合型>の<親子集合名

>を<組入れ親子集合型>とし,<データベースキー>D を<組入れ親レコード>とし,

保存を<

組入れ用位置指示子処置>として<組入れ操作>を実行する。

(8.4)

対象<子レコード句>の<保存句>が FIXED を指定し,対象レコードが組み入れられた親子集合実

現値が,対象レコードが切り離された親子集合実現値でないならば,MODIFY

:保存が固定である

の例外を発生させる。

(9)

対象レコードが,一般規則(8)が適用されない<親子集合型>の親子集合の子レコードに現在なってお

り,更に変更される構成要素が,<親子集合型>の<キー句>中の<構成要素識別子>によって指さ

れるならば,次のとおりとする。

(9.1)

対象レコードの<データベースキー>を<切離しレコード>とし,<親子集合型>の<親子集合名

>を<切離し親子集合型>として<切離し操作>を実行する。

(9.2)

対象レコードの<データベースキー>を<組入れレコード>とし,<親子集合型>の<親子集合名

>を<組入れ親子集合型>とし,

保存を<組入れ用位置指示子処置>とし,かつ,次のとおりとす

る。

(a)

<親子集合型>が特異<親子集合型>ならば,

ナルを<組入れ親レコード>として<組入れ操作>

を実行する。

(b)

<親子集合型>が特異<親子集合型>でないならば,対象レコードが切り離された親子集合の親レ

コードの<データベースキー>を<組入れ親レコード>として<組入れ操作>を実行する。

(10)

<MODIFY 文>の実行が,<レコード一意性句>,<子レコード一意性句>,<キー句>又は<順序

句>に違反するならば,MODIFY

:重複は禁止されているの例外を発生させる。それが<レコード検

査句>に違反するならば,MODIFY

:子レコード検査に違反したの例外を発生させる。それが<子レ

コード検査句>に違反するならば,MODIFY

:子レコード検査に違反したの例外を発生させる。

9.8

NULLIFY 文>

9.8.1

機能  参照される位置指示子をナルに設定する。

9.8.2

形式  形式は,次による。

<NULLIFY 文>  ::=

 NULLIFY

  <データベースキー識別子>

9.8.3

構文規則  構文規則は,次による。

なし。

9.8.4

一般規則  一般規則は,次による。

(1)

<データベースキー識別子>の指定は,次のとおりとする。

(a)

<データベースキー識別子>が SESSION を指定するならば,<セション位置指示子>の<データ

ベースキー>を

ナルに設定する。

(b)

<データベースキー識別子>が<レコードビュー名>を指定するならば,

<NULLIFY 文>の<レコ

ードビュー名>によって指される<レコード位置指示子>の<データベースキー>を

ナルに設定す

る。

(c)

<データベースキー識別子>が OWNER を指定するならば,<親レコード>及び<NULLIFY 文>

の<親子集合ビュー名>によって指される<親子集合位置指示子>の<位置>の両方を

ナルに設定

する。

(d)

<データベースキー識別子>が MEMBER を指定するならば,<NULLIFY 文>の<親子集合ビュー


46

X 3004 - 1987

名>によって指される<親子集合位置指示子>の<位置>を

ナルに設定する。

9.9

READY 文>

9.9.1

機能  処理のために一つ以上の<レコード型>を準備する。

9.9.2

形式  形式は,次による。

<READY 文>  ::=

 READY

  <準備指定>…

<準備指定>  ::=

<レコードビュー名>

<共用指定>

<アクセス目的>

<共用指定>  ::=

 EXCLUSIVE

|PROTECTED|SHARED

<アクセス目的>  ::=

 RETRIEVE

|UPDATE

9.9.3

構文規則  構文規則は,次による。

(1)

<READY 文>で,同じ<レコードビュー名>を複数個指定してはならない。

9.9.4

一般規則  一般規則は,次による。

(1)

<READY 文>中の<レコードビュー名>が<準備リスト>中の<準備指定>を指すならば,

READY

:レコードは既に準備されているの例外を発生させる。

(2)

次のいずれかの条件が

真ならば,READY:ロックが競合したの例外を発生させる。

(a)

<準備指定>が EXCLUSIVE である<共用指定>をもち,更に同時実行中の<セション状態>の<

準備リスト>に含まれている<レコードビュー名>をもつ。

(b)

いずれかの<レコードビュー名>が同時実行中の<セション状態>の<準備リスト>に含まれてい

て,しかもその<共用指定>が EXCLUSIVE である。

(c)

<準備指定>が SHARED である<共用指定>と UPDATE である<アクセス目的>をもち,更に同

時実行中の<セション状態>の<準備リスト>に指定されていて,しかもその<共用指定>が

PROTECTED

である<レコードビュー名>をもつ。

(d)

<準備指定>が PROTECTED である<共用指定>と UPDATE である<アクセス目的>をもち,更

に同時実行中の<セション状態>の<準備リスト>に指定されていて,しかもその<共用指定>が

PROTECTED

であるか,

又はその<アクセス目的>が UPDATE である<レコードビュー名>をもつ。

(e)

<準備指定>が PROTECTED である<共用指定>と RETRIEVE である<アクセス目的>をもち,

更に同時実行中の<セション状態>の<準備リスト>に指定されていて,しかもその<アクセス目

的>が UPDATE である<レコードビュー名>をもつ。

(3)

<準備指定>を<セション状態>の<準備リスト>に付け加える。

(4)

<準備指定>の<レコードビュー名>は,その<準備指定>を指す。

9.10

RECONNECT 文>

9.10.1

機能  <親子集合>中のレコード実現値の親子関係を変更する。

9.10.2

形式  形式は,次による。

<RECONNECT 文>  ::=

 RECONNECT

  <データベースキー識別子>IN<親子集合ビュー名>


47

X 3004 - 1987

9.10.3

構文規則  構文規則は,次による。

(1)

適正な<レコード型>は,<親子集合ビュー名>によって指される<親子集合型>中の子<レコード

型>として定義されている<レコード型>とする。

(2)

<データベースキー識別子>が<レコードビュー名>を指定するならば,その<レコードビュー名>

は,適正な<レコード型>を指さなければならない。

9.10.4

一般規則  一般規則は,次による。

(1)

対象<データベースキー>は,<データベースキー識別子>によって参照される<データベースキー

>とする。その<データベースキー>が

ナルならば,RECONNECT:データベースキーがナルである

の例外を発生させる。

対象<レコード型>は,対象<データベースキー>によって参照される<レコード型>とする。

(2)

対象<レコード型>の<レコードビュー名>が UPDATE である<アクセス目的>をもつ<準備リス

ト>中の<準備指定>を指さないならば,RECONNECT

:レコードは更新用として準備されていない

の例外を発生させる。

(3)

対象<レコード型>が適正な<レコード型>でないならば,RECONNECT

:不適正なレコード型であ

るの例外を発生させる。

(4)

対象<データベースキー>を<切離しレコード>とし,<RECONNECT 文>の<親子集合ビュー名>

を<切離し親子集合型>として,<切離し操作>を実行する。

(5)

<組入れ操作>は,次のとおりに実行する。

対象<データベースキー>を<組入れレコード>とし,<RECONNECT 文>の<親子集合ビュー名

>を<組入れ親子集合型>とし,<RECONNECT 文>の<親子集合ビュー名>で指される<親子集合

位置指示子>の中の<親レコード>の<データベースキー>を<組入れ親レコード>とし,そして

新を<組入れ用位置指示子処置>とする。

(6)

対象<レコード型>が,<親子集合ビュー名>によって指される<親子集合型>では<保存句>に

FIXED

を指定してあり,かつ,対象レコードを組み入れた親子集合が,その対象レコードが切り離さ

れた元の親子集合でないならば,RECONNECT

:保存が固定であるの例外を発生させる。

9.11

ROLLBACK 文>

9.11.1

機能  ロールバックで現行トランザクションを終了させる。

9.11.2

形式  形式は,次による。

<ROLLBACK 文>  ::=

 ROLLBACK

[FINISH]

9.11.3

構文規則  構文規則は,次による。

なし。

9.11.4

一般規則  一般規則は,次による。

(1)

現行トランザクションを終了させる。そのトランザクションの間,セションによって実行されたすべ

ての文のデータベースに対する影響を取り消す。

(2)

<位置指示子群>を主体<サブスキーマ>に対する初期<位置指示子群>に設定する。

(3)

<一時親子集合群>中の各<一時親子集合>に対して,その親子集合の親子集合関係から各子レコー

ドを取り去る。

(4) FINISH

を指定すると,<準備リスト>を

空にする。

9.12

STORE 文>


48

X 3004 - 1987

9.12.1

機能  データベースにレコードを格納する。

9.12.2

形式  形式は,次による。

<STORE 文>  ::=

 STORE

  <データベース転送>  [<格納保存>]

<格納保存>  ::=

 RETAIN

ALL

|RETAIN RECORD

|RETAIN SET<親子集合ビュー名>…

|RETAIN RECORD SET<親子集合ビュー名>…

9.12.3

構文規則  構文規則は,次による。

(1)

対象<レコードビュー名>は,<データベース転送>の<レコードビュー名>とする。対象<レコー

ド型>は,対象<レコードビュー名>によって指される<レコード型>とする。対象<レコードビュ

ー>は,対象<レコードビュー名>によって指される<レコードビュー>とする。

(2)

対象<レコードビュー>中の<構成要素ビュー名>によって指されない対象<レコード型>中の各<

構成要素型>は,<既定句>を含まなければならない。

(3)

<データベース転送>中の相手<構成要素ビュー識別子>の<構成要素ビュー名>によって指されな

い対象<レコード型>の各<構成要素型>は,<既定句>を含まなければならない。

(4)

対象<レコード型>が子<レコード型>と定義されている<親子集合型>のうち,その<組入れ句>

に AUTOMATIC を指定している<親子集合型>に対応する<親子集合ビュー>は,主体<サブスキー

マ>に含まれていなければならない。

(5)

<格納保存>内に含まれるいずれの<親子集合ビュー名>も,その<格納保存>内の他のいずれの<

親子集合ビュー名>とも異ならなければならない。

(6)

<格納保存>中で指定された各<親子集合ビュー名>に対して,対象<レコード型>は,その<親子

集合ビュー名>によって参照される<親子集合型>の子<レコード型>又は親<レコード型>のいず

れかでなければならない。

9.12.4

一般規則  一般規則は,次による。

(1)

対象<レコードビュー名>が,UPDATE である<アクセス目的>をもつ<準備リスト>中の<準備指

定>を指さないならば,STORE

:レコードは更新用として準備されていないの例外を発生させる。

(2)

データベースに対象<レコード型>のレコード実現値を生成する。新しいレコード実現値は,対象レ

コードとする。対象レコードは,他のレコード実現値に対し,処理系作成者の定義する位置を想定し,

他のレコード実現値の相対順序は,変わらない(

4

)

(

4

)

新しいレコード実現値の構成は,

6.8

<既定句>”の一般規則で規定する。

(3)

<データベース転送句>中の各<構成要素ビュー識別子>の該当<データベースキー>は,対象レコ

ードの<データベースキー>とする。

(4)

<データベース転送>中のすべての<オペランド>を評価する。

(5)

<データベース転送>中の各<データベース転送句>に対して,<データベース転送>中の各<デー

タベース転送句>によって指定されるデータ転送を実行する。

(6)

対象<レコード型>が親<レコード型>である各<親子集合型>に対して,子レコードをもたない親

子集合の親レコードとして対象レコードを確立する。

(7)

対象<レコード型>が子<レコード型>である各<親子集合型>に対して,次のとおりとする。


49

X 3004 - 1987

(7.1)

対象<子レコード句>を子<レコード型>が対象<レコード型>である<親子集合型>の<子レコ

ード句>とする。

(7.2)

<格納保存>が ALL を指定しているか,又は<親子集合型>が<格納保存>中の<親子集合ビュー

名>によって指されているならば,C を

保存とする。そうでなければ,C を更新とする。

(7.3)

<組入れ操作>は,次のとおりとする。

(7.3.1)

対象<子レコード句>の<組入れ句>に AUTOMATIC が指定されているならば,<組入れ操作>は,

次のとおり実行する。

対象レコードの<データベースキー>を<組入れレコード>とし,<親子集合型>の<親子集合

名>を<組入れ親子集合型>とし,<親子集合型>を指している<親子集合ビュー>の<親子集合

位置指示子>の<親レコード>の<データベースキー>を<組入れ親レコード>とし,そして,C

を<組入れ用位置指示子処置>とする。

(7.3.2)

対象<子レコード句>の<組入れ句>に STRUCTURAL が指定されているならば,次のとおりとす

る。

(a)

<親子集合型>の親<レコード型>の実現値のうち,<組入れ句>の<構成要素識別子一致>の<

親レコード構成要素識別子>によって参照される各データ項目の値が,格納しようとしているレコ

ードの中の<構成要素識別子一致>の<子レコード構成要素識別子>により参照されるデータ項目

の値に等しい実現値の<データベースキー>を D とする。そのような実現値が存在しなければ,

STORE

:親子集合組入れに際し構成要素一致が図れなかったの例外を発生させる。

(b)

<組入れ操作>は,次のとおりに実行する。

対象レコードの<データベースキー>を<組入れレコード>とし,<親子集合型>の<親子集合

名>を<組入れ親子集合型>とし,<データベースキー>D を<組入れ親レコード>とし,そして

C

を<組入れ用位置指示子処置>とする。

(7.3.3)

対象<子レコード句>の<組入れ句>に MANUAL が指定されているならば,<親子集合型>の任

意の実現値に対象レコードを組み入れない。

(8)

<セション位置指示子>を対象レコードを参照するように設定する。

(9)

<格納保存>が ALL も RECORD も指定しないならば,<レコードビュー名>によって指される<レ

コード位置指示子>を対象レコードを参照できるように設定する。<格納保存>が ALL を指定しない

とき,対象<レコード型>が親<レコード型>である主体<サブスキーマ>中の<親子集合ビュー>

によって指される各<親子集合型>に対して,その<親子集合型>が<格納保存>中の<親子集合ビ

ュー名>によって指されていないならば,その<親子集合型>に対する<親子集合位置指示子>の<

親レコード>を対象レコードの<データベースキー>に設定し,その<親子集合位置指示子>の<位

置>を

ナルに設定する。

(10)

<STORE 文>の実行が,<レコード一意性句>に違反するならば,STORE

:重複は禁止されている

の例外を発生させる。それが,<レコード検査句>に違反するならば,STORE

:レコード検査に違反

したの例外を発生させる。

9.13

<データベースキー等価テスト文>

9.13.1

機能  二つのデータベースキーが同じレコードを参照するかどうかを判定する。

9.13.2

形式  形式は,次による。

<データベースキー等価テスト文>  ::=

 TEST

<オペランド 1>=<オペランド 2>


50

X 3004 - 1987

<オペランド 1>::=<データベースキー識別子>

<オペランド 2>::=<データベースキー識別子>

9.13.3

構文規則  構文規則は,次による。

なし。

9.13.4

一般規則  一般規則は,次による。

(1)

<オペランド 1>又は<オペランド 2>で参照される<データベースキー>が

ナルならば,テスト:デ

ータベースキーがナルであるの例外を発生する。

(2)

<オペランド 1>によって参照される<データベースキー>と<オペランド 2>によって参照される

<データベースキー>が同じレコード実現値を参照するならば,

TEST

パラメタの値を 1 に設定する。

そうでなければ,TEST パラメタの値を 0 に設定する。

9.14

<データベースキーナルテスト文>

9.14.1

機能  <データベースキー>がナルかどうかを判定する。

9.14.2

形式  形式は,次による。

<データベースキーナルテスト文>  ::=

 TEST

NULL

  <データベースキー識別子>

9.14.3

構文規則  構文規則は,次による。

なし。

9.14.4

一般規則  一般規則は,次による。

(1)

<データベースキー識別子>によって参照される<データベースキー>が

ナルならば,TEST パラメ

タの値を 1 に設定する。そうでなければ,TEST パラメタの値を 0 に設定する。

9.15

<親子集合空テスト文>

9.15.1

機能  親子集合が任意の子レコードをもつかどうかを判定する。

9.15.2

形式  形式は,次による。

<親子集合空テスト文>  ::=

TEST SET EMPTY

  <親子集合ビュー名>

9.15.3

構文規則  構文規則は,次による。

(1)

対象<親子集合型>は,<親子集合ビュー名>によって指される<親子集合型>とする。対象<親子

集合位置指示子>は,<親子集合ビュー名>によって指される<親子集合位置指示子>とする。

9.15.4

一般規則  一般規則は,次による。

(1)

対象親子集合の判定は,次のとおりとする。

(1.1)

対象<親子集合型>が特異<親子集合型>ならば,対象親子集合は,対象<親子集合型>の唯一の

実現値とする。

(1.2)

対象<親子集合型>が特異<親子集合型>でないならば,次のとおりとする。

(a)

対象<親子集合位置指示子>の<親レコード>が

ナルならば,テスト:親子集合位置指示子はナル

であるの例外を発生させる。

(b)

対象<親子集合位置指示子>の<親レコード>が

ナルでないならば,対象親子集合は,対象<親子

集合位置指示子>によって参照される親子集合とする。

(2)

対象親子集合が主体<サブスキーマ>中に含まれる<レコード型>の一つ以上の子レコードをもつな

らば,TEST パラメタの値を 0 に設定する。そうでなければ,TEST パラメタの値を 1 に設定する。

9.16

<親子関係テスト文>


51

X 3004 - 1987

9.16.1

機能  レコードが<親子集合型>のある実現値の子レコードかどうかを判定する。

9.16.2

形式  形式は,次による。

<親子関係テスト文>  ::=

 TEST

SET

  <親子集合ビュー名>CONTAINS<データベースキー識別子>

9.16.3

構文規則  構文規則は,次による。

なし。

9.16.4

一般規則  一般規則は,次による。

(1)

対象<データベースキー>は,<データベースキー識別子>によって参照される<データベースキー

>とする。対象<データベースキー>が

ナルならば,テスト:データベースキーはナルであるの例外

を発生させる。

(2)

対象<データベースキー>によって参照されるレコードの<レコード型>が<親子集合ビュー名>で

指される<親子集合型>の子<レコード型>として定義されていないならば,

テスト:不適正なレコ

ード型であるの例外を発生させる。

(3)

対象<データベースキー>によって参照されるレコードが<親子集合ビュー名>で指される<親子集

合型>の実現値の子レコードならば,TEST パラメタの値を 1 に設定する。そうでなければ,TEST パ

ラメタの値を 0 に設定する。

9.17

<データベースキー識別子>

9.17.1

機能  <データベースキー>を参照する。

9.17.2

形式  形式は,次による。

<データベースキー識別子>  ::=

 SESSION

|<レコードビュー名>

|{OWNER|MEMBER}<親子集合ビュー名>

9.17.3

構文規則  構文規則は,次による。

(1)

<データベースキー識別子>が OWNER を指定するならば,<親子集合ビュー名>によって指される

<親子集合型>は,特異<親子集合型>であってはならない。

9.17.4

一般規則  一般規則は,次による。

(1)

<データベースキー>の参照は,次のとおりとする。

(1.1) SESSION

を指定するならば,<データベースキー識別子>は,<セション位置指示子>の<データ

ベースキー>を参照する。

(1.2)

<レコードビュー名>を指定するならば,<データベースキー識別子>は,<データベースキー識

別子>の<レコードビュー名>によって指される<レコード位置指示子>の<データベースキー>

を参照する。

(1.3) OWNER

を指定するならば,<データベースキー識別子>は,<データベースキー識別子>の<親

子集合ビュー名>によって指される<親子集合位置指示子>の<親レコード>の<データベースキ

ー>を参照する。

(1.4) MEMBER

を指定するならば,次のとおりとする。

(a)

対象<位置>は,<データベースキー識別子>の<親子集合ビュー名>によって指される<親子集

合位置指示子>の<位置>とする。

(b)

対象<位置>が単一の<データベースキー>ならば,<データベースキー識別子>は,その<デー


52

X 3004 - 1987

タベースキー>を参照する。対象<位置>が対の<データベースキー>であるならば,<データベ

ースキー識別子>は,

ナルを参照する。

9.18

<構成要素ビュー識別子>

9.18.1

機能  構成要素又はデータ項目を参照する。

9.18.2

形式  形式は,次による。

<構成要素ビュー識別子>  ::=

<ドット形式構成要素ビュー識別子>

|<OF 形式構成要素ビュー識別子>

<ドット形式構成要素ビュー識別子>  ::=

[<レコードビュー名>.

]<構成要素ビュー名>[<添字>][CURSOR]

<OF 形式構成要素ビュー識別子>  ::=

<構成要素ビュー名>[<添字>]

[OF<レコードビュー名>][CURSOR]

9.18.3

構文規則  構文規則は,次による。

(1)

<構成要素ビュー識別子>の該当<レコード型>は,<構成要素ビュー識別子>を含む<NDL 文>の

構文規則で規定する。

(2)

<構成要素ビュー識別子>の指定は,次のとおりとする。

(a)

<構成要素ビュー識別子>が CURSOR を指定しないならば,<構成要素ビュー識別子>は,該当<

レコード型><構成要素型>と<レコードビュー名>を指さなければならない。指定されているな

らば,該当<レコード型>を指さなければならない。<構成要素ビュー識別子>の主体<レコード

型>は,該当<レコード型>とする。

(b)

<構成要素ビュー識別子>が CURSOR を指定するならば,<レコードビュー名>を指定しなければ

ならず,主体<レコードビュー>は,その<レコードビュー名>によって指される<レコードビュ

ー>とする。

(3)

<構成要素ビュー名>は,主体<レコード型>の<構成要素型>を指さなければならない。その<構

成要素型>が主体<構成要素型>である。

(4)

<構成要素ビュー識別子>が<添字>を含むならば,次のとおりとする。

(a)

主体<構成要素型>は,配列を定義しなければならない。

(b)

<添字>の該当<反復句>は,主体<構成要素型>に含まれる<反復句>とする。

9.18.4

一般規則  一般規則は,次による。

(1)

<構成要素ビュー識別子>の該当<データベースキー>は,<構成要素ビュー識別子>を含む文の一

般規則で規定する。

(2)

<構成要素ビュー識別子>の指定により,次のとおりとする。

(a)

<構成要素ビュー識別子>が CURSOR を指定するならば,主体<データベースキー>は,<レコー

ド位置指示子>の<データベースキー>とし,その<レコードビュー名>は,主体<レコード型>

を指すものとする。その<データベースキー>が

ナルならば,位置指示子参照:データベースキー

がナルであるの例外を発生させる。

(b)

<構成要素ビュー識別子>が CURSOR を指定しないならば,主体<データベースキー>は該当<デ

ータベースキー>とする。

(3)

<構成要素ビュー識別子>は,主体<データベースキー>によって参照されるレコード中のデータ項


53

X 3004 - 1987

目又は配列を次のとおりに参照する。

(a)

<構成要素ビュー識別子>の主体<構成要素型>がデータ項目を定義するならば,<構成要素ビュ

ー識別子>はそのデータ項目を参照する。

(b)

<構成要素ビュー識別子>の主体<構成要素型>が配列を定義し,<構成要素ビュー識別子>が<

添字>を含まないならば,<構成要素ビュー識別子>はその配列を参照する。

(c)

<構成要素ビュー識別子>の主体<構成要素型>が配列を定義し,<構成要素ビュー識別子>が<

添字>を含むならば,<構成要素ビュー識別子>は配列中の i 番目のデータ項目を参照する。ここ

で,i は<添字>の値とする。

9.19

<パラメタ識別子>

9.19.1

機能  パラメタ項目を参照する。

9.19.2

形式  形式は,次による。

<パラメタ識別子>  ::=

<パラメタ名>  [<添字>]

9.19.3

構文規則  構文規則は,次による。

(1)

<パラメタ識別子>の対象<パラメタ宣言>は,<パラメタ識別子>のくパラメタ名>によって指さ

れる<パラメタ宣言>とする。

(2)

対象<パラメタ宣言>が<反復句>を含まないならば,<添字>を指定してはならない。

対象<パラメタ宣言>が<反復句>を含み,<添字>が指定されているならば,その<反復句>は

<添字>の該当<反復句>とする。

9.19.4

一般規則  一般規則は,次による。

(1)

参照は,次のとおりとする。

(a)

<添字>を指定しないと,<パラメタ識別子>は,対象<パラメタ宣言>に対応するパラメタとし

て与えられるデータ項目又は配列を参照する。

(b)

<添字>を指定すると,<パラメタ識別子>は,対象<パラメタ宣言>に対応するパラメタとして

与えられる配列中の i 番目のデータ項目を参照する。ここで,i は<添字>の値とする。

9.20

<パラメタ転送>と<データベース転送>

9.20.1

形式  形式は,次による。

<パラメタ転送>  ::=

<レコードビュー名><パラメタ転送句>…

<パラメタ転送句>  ::=

 SET

<パラメタ識別子>TO<オペランド>

<データベース転送>  ::=

<レコードビュー名>[<データベース転送句>…]

<データベース転送句>  ::=

 SET

<構成要素ビュー識別子>TO<オペランド>

9.20.2

構文規則  構文規則は,次による。

(1)

<パラメタ転送>に対して,相手識別子 (target identifier) は<パラメタ識別子>とする。

<データベース転送>に対して,相手識別子は<構成要素ビュー識別子>とする。

(2)

転送を<パラメタ転送>又は<データベース転送>のいずれかとする。

転送句を<パラメタ転送句>又は<データベース転送句>のいずれかとする。


54

X 3004 - 1987

(3)

転送の対象<レコード型>及び転送中の各<構成要素ビュー識別子>の該当<レコード型>は,<レ

コードビュー名>によって指される<レコード型>とする。

(4)

源 (source)<オペランド>の型は,次のとおりとする。

(a)

転送句の相手識別子の型が文字列ならば,源<オペランド>の型は文字列でなければならない。

(b)

転送句の相手識別子の型が真数ならば,源<オペランド>の型は真数でなければならない。

(c)

転送句の相手識別子の型が概数ならば,源<オペランド>の型は概数又は真数でなければならない。

(5)

転送句の<オペランド>は,次のとおりとする。

(a)

転送句の相手識別子がデータ項目又は配列のデータ項目を参照するならば,その転送句の<オペラ

ンド>はデータ項目でなければならない。

(b)

転送句の相手識別子が配列を参照するならば,その転送句の<オペランド>は配列でなければなら

ない。

(6)

相手識別子であるどの<構成要素識別子>も CURSOR を指定してはならない。相手識別子である<構

成要素識別子>が<レコードビュー名>を指定するならば,その<レコードビュー名>は,<データ

ベース転送>の<レコードビュー名>と同じでなければならない。

(7)

<データベース転送>の<オペランド>中に含まれる<構成要素ビュー識別子>は,CURSOR を指定

しなければならない。

9.20.3

一般規則  一般規則は,次による。

(1)

相手項目は,相手識別子によって参照される項目とする。源値は,源<オペランド>の値とする。

(2)

転送の結果は,次のとおりとする。

(2.1)

相手項目の型が長さ L の文字列ならば,次のとおりとする。

(a)

源値の長さが L ならば,相手項目には源値が設定される。

(b)

源値の長さが M で,M>L であり,かつ源値の最後(右)の M−L 文字が空白文字ならば,相手項

目には源値の最初(左)の L 文字が設定される。そうでなければ,

データ転送:文字列が切り詰め

られたの例外を発生させる。

(c)

源値の長さが M で,M<L ならば,相手項目の最初(左)の M 文字には源値が設定され,相手項目

の最後(右)の L−M 文字には空白文字が設定される。

(2.2)

相手項目の型が真数であり,かつ源値が相手項目のデータ型の値として厳密に表現されているなら

ば,相手項目にはその値が設定される。そうでなければ,

データ転送:数値が切り詰められたの例

外を発生させる。

(2.3)

相手項目の型が概数ならば,相手項目に源値の概数値を設定する。

10.

補助操作

10.1

<組入れ操作>

10.1.1

機能  レコード実現値を親子集合中に組み入れる。

10.1.2

形式  形式は,次による。

<組入れ操作>  ::=

<組入れレコード>

<組入れ親子集合型>

<組入れ親レコード>

<組入れ用位置指示子処置>


55

X 3004 - 1987

<組入れレコード>  ::=

<データベースキー>

<組入れ親子集合型>  ::=

<親子集合名>|<親子集合ビュー名>

<組入れ親レコード>  ::=

<データベースキー>

<組入れ用位置指示子処置>  ::=

保存|更新

10.1.3

構文規則  構文規則は,次による。

なし。

10.1.4

一般規則  一般規則は,次による。

(1)

対象レコードは,<組入れレコード>の<データベースキー>によって参照されるレコードとする。

対象<レコード型>は,対象レコードの<レコード型>とする。対象<親子集合型>は,<組入れ親

子集合型>の<親子集合名>又は<親子集合ビュー名>によって指される<親子集合型>とする。対

象<親子集合位置指示子>は,あるとすればその<親子集合ビュー名>が対象<親子集合型>を指す

<親子集合位置指示子>とする。

(2)

対象レコードが,既に対象<親子集合型>の実現値の子レコードならば,

組入れ:レコードは既に子

レコードになっているの例外を発生させる。

(3)

対象親子集合は,次のとおりとする。

(3.1)

対象<親子集合型>が特異<親子集合型>ならば,対象親子集合は,対象<親子集合型>の唯一の

実現値とする。

(3.2)

対象<親子集合型>が特異<親子集合型>でないならば,対象親子集合は,<組入れ親レコード>

の<データベースキー>によって参照されるレコード実現値を親とする対象<親子集合型>の実現

値とする。その<データベースキー>が

ナルならば,組入れ:親子集合位置指示子がナルであるの

例外を発生させる。

対象<親子集合型>の<順序句>が NEXT 又は PRIOR を指定するならば,

(a)

対象<親子集合位置指示子>がなければ,

組入れ:親子集合がサブスキーマ中にないの例外を発生

させる。

(b)

対象親子集合が対象<親子集合位置指示子>によって参照される親子集合実現値でないならば,

入れ:レコードが親子集合の子レコードでないの例外を発生させる。

(4)

対象<親子集合型>の<順序句>又は<キー句>によって指定される親子集合順序基準に従って,対

象レコードを対象親子集合の子レコードとして組み入れる。対象親子集合の他の子レコードの相対順

序は変わらない。

(5)

対象<親子集合型>の<順序句>が NEXT (PRIOR)  を指定するならば,次のとおりとする。

(5.1)

対象<親子集合位置指示子>の<位置>が

ナルでない単一の<データベースキー>ならば,その<

データベースキー>によって参照される子レコードの直後(前)に対象親子集合中の子レコードと

して対象レコードを組み入れる。

(5.2)

対象<親子集合位置指示子>の<位置>が

ナルである単一の<データベースキー>ならば,その<

親子集合位置指示子>によって参照される親子集合実現値中の最初(最後)の子レコードとして対

象レコードを組み入れる。


56

X 3004 - 1987

(5.3)

対象<親子集合位置指示子>の<位置>が対の<データベースキー>であり,それらの<データベ

ースキー>の最初(2 番目)が

ナルでなければ,最初(2 番目)の<データベースキー>によって参

照される子レコードの直後(前)に対象レコードを組み入れる。

(5.4)

対象<親子集合位置指示子>の<位置>が対の<データベースキー>であり,それらの<データベ

ースキー>の最初(2 番目)が

ナルならば,その<親子集合位置指示子>によって参照される親子

集合実現値中の最初(最後)の子レコードとして対象レコードを組み入れる。

(6)

<組入れ操作>が対象<親子集合型>中の<子レコード一意性句>,<順序句>又は<キー句>に違

反するならば,

組入れ:重複は禁止されているの例外を発生させる。それによって,<子レコード検

査句>又は<組入れ句>から引き起こされる<子レコード検査句>に違反するならば,

組入れ:子レ

コード検査に違反したの例外を発生させる。

(7)

対象<親子集合位置指示子>があれば,次のとおりとする。

(7.1)

<組入れ用位置指示子処置>が

更新ならば,対象<親子集合位置指示子>の<位置>には対象レコ

ードの<データベースキー>を設定する。

(7.2)

<組入れ用位置指示子処置>が

保存であり,次の条件が真ならば,対象<親子集合位置指示子>の

<位置>を対象レコードの<データベースキー>に設定する。

条件:対象<親子集合位置指示子>の<位置>が対の<データベースキー>であって,その最初

の<データベースキー>が対象親子集合中の対象レコードの直前のレコードを参照してい

るか,又は 2 番目の<データベースキー>が対象親子集合中の対象レコードの直後のレコ

ードを参照している。

10.2

<切離し操作>

10.2.1

機能  レコード実現値を親子集合から切り離す。

10.2.2

形式  形式は,次による。

<切離し操作>  ::=

<切離しレコード>

<切離し親子集合型>

<切離しレコード>  ::=

<データベースキー>

<切離し親子集合型>  ::=

<親子集合名>|<親子集合ビュー名>

10.2.3

構文規則  構文規則は,次による。

なし。

10.2.4

一般規則  一般規則は,次による。

(1)

対象レコードは,<切離しレコード>の<データベースキー>によって参照されるレコードとする。

対象<レコード型>は,対象レコードの<レコード型>とする。対象<親子集合型>は,<切離し親

子集合型>の<親子集合名>又は<親子集合ビュー名>によって指される<親子集合型>とする。

(2)

対象親子集合は,対象レコードが子レコードとなっている対象<親子集合型>の実現値とする。対象

レコードが対象<親子集合型>のどの実現値の子レコードにも現在なっていないならば,

切離し:レ

コードは親子集合の子レコードではないの例外を発生させる。

(3)

その<親子集合ビュー名>で対象<親子集合型>を指しているような<親子集合位置指示子>があれ

ば,次のとおりである。


57

X 3004 - 1987

(3.1)

その<親子集合位置指示子>の<位置>が単一の<データベースキー>であって,対象レコードを

参照しているならば,

(a)

対象親子集合中にその親子集合の子レコードで対象レコードの直前のレコード実現値があれば,L

をそのレコード実現値の<データベースキー>とする。そうでなければ,L を

ナルにする。

(b)

対象親子集合中にその親子集合の子レコードで対象レコードの直後のレコード実現値があれば,R

をそのレコード実現値の<データベースキー>とする。そうでなければ,R を

ナルにする。

(c)

その<親子集合位置指示子>の<位置>として,<データベースキー>の組 L と R を,その順番に

設定する。

(3.2)

その<親子集合位置指示子>の<位置>が対の<データベースキー>であって,最初(2 番目)の

<データベースキー>が対象レコードを参照しているならば,

(a)

対象親子集合中にその親子集合の子レコードで対象レコードの直前(直後)にレコード実現値があ

るならば,L (R)  をそのレコード実現値の<データベースキー>とする。そうでなければ,L (R)  

ナルにする。

(b)

その<親子集合位置指示子>の<位置>の最初(2 番目)の<データベースキー>を L (R)  で置き

換える。

(3.3)

そうでなければ,その<親子集合位置指示子>に対しては何もしない。

(4)

対象親子集合中の親子関係から対象レコードを切り離す。対象親子集合の他の子レコードの相対順序

は変わらない。

11.

解釈上の状態

11.1

<セション状態>

11.1.1

形式  形式は,次による。

<セション状態>  ::=

<位置指示子群>

<一時親子集合群>

<準備リスト>

11.1.2

一般規則  一般規則は,次による。

(1)

<モジュール>に対する初期<セション状態>は,その<モジュール>に対して初期<位置指示子群

>,<モジュール>の<一時親子集合指定群>に対する初期<一時親子集合群>及び初期<準備リス

ト>を含む。

11.2

<位置指示子群>

11.2.1

形式  形式は,次による。

<位置指示子群>  ::=

<セション位置指示子>

[<レコード位置指示子>…]

[<親子集合位置指示子>…]

<セション位置指示子>  ::=

<データベースキー>

<レコード位置指示子>  ::=

<レコードビュー名>  <データベースキー>


58

X 3004 - 1987

<親子集合位置指示子>  ::=

<親子集合ビュー名>

<親レコード>

<位置>

<親レコード>  ::=

<データベースキー>

<位置>  ::=

<データベースキー>

|<データベースキー>  <データベースキー>

<データベースキー>  ::=

一般規則 11.2.2(1)参照。

11.2.2

一般規則  一般規則は,次による。

(1)

<データベースキー>は,データベース中の唯一のレコードを識別するか,

ナルであってどのレコー

ドも識別しないかのいずれかの処理系作成者の定義による値とする。

(2)

<レコード位置指示子>の<レコードビュー名>は,その<レコード位置指示子>を指す。<親子集

合位置指示子>の<親子集合ビュー名>は,その<親子集合位置指示子>を指す。

(3)

<モジュール>に対する初期<位置指示子群>は,次を含む。

(a)

初期<セション位置指示子>

(b)

<モジュール>の主体<サブスキーマ>の各<レコードビュー>に対する初期<レコード位置指示

子>

(c)

<モジュール>の主体<サブスキーマ>中に含まれる各<親子集合ビュー>に対する初期<親子集

合位置指示子>

(d)

<モジュール>中に含まれる各<一時親子集合指定>に対する初期<親子集合位置指示子>

(4)

初期<セション位置指示子>は,

ナルの<データベースキー>を含む。

(5)

<レコードビュー>に対する初期<レコード位置指示子>は,次を含む。

(a)

<レコードビュー>中に含まれる<レコードビュー名>に等しい<レコードビュー名>

(b)

ナルの<データベースキー>

(6)

<親子集合ビュー>に対する初期<親子集合位置指示子>は,次を含む。

(a)

<親子集合ビュー>中に含まれる<親子集合ビュー名>に等しい<親子集合ビュー名>

(b)

ナルの<データベースキー>である<親レコード>

(c)

ナルの<データベースキー>である<位置>

(7)

<一時親子集合指定>に対する初期<親子集合位置指示子>は,次を含む。

(a)

<一時親子集合指定>中に含まれる<親子集合ビュー名>に等しい<親子集合ビュー名>

(b)

ナルの<データベースキー>である<親レコード>

(c)

ナルの<データベースキー>である<位置>

(8)

<セション位置指示子>は,<セション位置指示子>の<データベースキー>によって参照されるレ

コードを参照する。

<レコード位置指示子>は,<レコード位置指示子>の<データベースキー>によって参照される

レコードを参照する。

<親子集合位置指示子>の<親子集合ビュー名>が特異<親子集合型>でない<親子集合型>を指

すならば,<親子集合位置指示子>は,<親子集合位置指示子>の<親レコード>の<データベース


59

X 3004 - 1987

キー>によって参照されるレコード実現値を親とする親子集合を参照する。

<親子集合位置指示子>の<親子集合ビュー名>が特異<親子集合型>を指すならば,<親子集合

位置指示子>は,データベース又は<セション状態>中のその<親子集合型>の唯一の実現値を参照

する。

11.3

<一時親子集合群>

11.3.1

形式  形式は,次による。

<一時親子集合群>  ::=

[<一時親子集合>…]

<一時親子集合>  ::=

一般規則 11.3.2(1)  参照。

11.3.2

一般規則  一般規則は,次による。

(1)

<一時親子集合>は,一時<親子集合型>の実現値とする。

(2)

<一時親子集合指定群>に対する初期<一時親子集合群>は,<一時親子集合指定群>中に定義され

た各一時<親子集合型>の

空の実現値を含む。

11.4

<準備リスト>

11.4.1

形式  形式は,次による。

<準備リスト>  ::=

空|<準備指定>…

11.4.2

一般規則  一般規則は,次による。

(1)

初期<準備リスト>は,

空の状態とする。

12.

状態コード  次の表は,各条件に対し STATUS パラメタに返される値を規定する。NDL に対して,現

在及び将来定められる状態コードの最初(左端)の数字は,

“1”以外の値でなければならず,2 番目の数

字は,

“0”又は“1”でなければならない。

“1××××”の形式,特に“10×××”及び“11×××”の形

式の状態コードは,処理系作成者のために予約する。

条件

01610

配列参照:添字が境界外である。

01810 CONNECT

:レコードは既に子レコードになっている。

01310 CONNECT

:データベースキーはナルである。

01330 CONNECT

:不適正なレコード型である。

01920 CONNECT

:レコードは更新用として準備されていない。

01310

位置指示子参照:データベースキーはナルである。

01410

データ転送:文字列が切り詰められた。

01420

データ転送:数値が切り詰められた。

01310 DISCONNECT

:データベースキーはナルである。

01330 DISCONNECT

:不適正なレコード型である。

01920 DISCONNECT

:レコードは更新用として準備されていない。

01310 ERASE

:データベースキーはナルである。

01920 ERASE

:レコードは更新用として準備されていない。

01720 ERASE

:親子集合が準固定子レコードをもつ。

01310 FIND

:データベースキーはナルである。

00100 FIND

:レコードが見つからなかった。

01910 FIND

:レコードは準備されていない。

01920 FIND

:レコードは更新用として準備されていない。


60

X 3004 - 1987

条件

01320 GET

:レコード位置指示子はナルである。

01510

組入れ:重複は禁止されている。

01860

組入れ:子レコード検査に違反した。

01810

組入れ:レコードは既に子レコードになっている。

01830

組入れ:レコードは親子集合の子レコードではない。

01340

組入れ:親子集合位置指示子はナルである。

01610

組入れ:親子集合はサブスキーマ中にない。

01320 MODIFY

:レコード位置指示子はナルである。

01840 MODIFY

:レコード検査に違反した。

01510 MODIFY

:重複は禁止されている。

01860 MODIFY

:子レコード検査に違反した。

01230 MODIFY

:親子集合組入れに際し構成要素一致が図れなかった。

01920 MODIFY

:レコードは更新用として準備されていない。

01820 MODIFY

:保存が固定である。

01110

手続:デッドロックが発生した。

00000

手続:正常。

01940 READY

:ロックが競合した。

01950 READY

:レコードは既に準備されている。

01310 RECONNECT

:データベースキーがナルである。

01920 RECONNECT

:レコードは更新用として準備されていない。

01330 RECONNECT

:不適正なレコード型である。

01820 RECONNECT

:保存が固定である。

01830

切離し:レコードは親子集合の子レコードではない。

01840 STORE

:レコード検査に違反した。

01510 STORE

:重複は禁止されている。

01230 STORE

:親子集合組入れに際し構成要素一致が図れなかった。

01920 STORE

:レコードは更新用として準備されていない。

01310

テスト:データベースキーがナルである。

01330

テスト:不適正なレコード型である。

01340

テスト:親子集合位置指示子はナルである。

13.

水準  この規格は,二つの水準を規定する。水準 2 は,完全 NDL データベース言語とする。

水準 1 は,水準 2 の部分集合とし,次の付加的な規則に従う。

(1)

6.3

<レコード型>”及び“6.9<レコード検査句>”:

<レコード型>は,<レコード検査句>を含んではならない。

(2)

6.14

<子レコード句>”及び“6.20<子レコード検査句>”:

<子レコード句>は,<子レコード検査句>を含んではならない。

(3)

9.5

FIND 文>”:

<FIND 文>は,WHERE<条件>を含んではならない。

(4)

8.

<モジュール言語>“及び”8.3<一時親子集合指定群>”:

<モジュール>は,<一時親子集合指定群>を含んではならない。

(5)

“<6.16

組入れ句>”:

<組入れ句>は,STRUCTURAL<構造指定>を含んではならない。

(6)

6.15

<子レコード名句>”:

<親子集合型>の<子レコード名句>に含まれる<レコード名>は,その<親子集合型>の<親レ

コード句>に含まれる<レコード名>と同じであってはならない。


61

X 3004 - 1987

参考

1.

納入業者と部品の問題例

この参考は,規格の一部ではない。

以下は,

“納入業者と部品”の問題に対する<スキーマ>,<サブスキーマ>,COBOL プログラムの主

要要素及び<モジュール>の例(

1

)

である。

(

1

)

この例は,C. J. Date の“An Introduction to Database Systems (Third Edition) ”, Addison-Wesley 1981

の24章から26章によっている。

1.1

納入業者と部品の<スキーマ>の例

SCHEMA SUPPLIERS_AND_PARTS

RECORD S

UNIQUE SNO

ITEM SNO CHARACTER 5

ITEM SNAME CHARACTER 20

ITEM SSTATUS NUMERIC 3

ITEM CITY CHARACTER 15

RECORD P

UNIQUE PNO

ITEM PNO CHARACTER 6

ITEM PNAME CHARACTER 20

ITEM COLOR CHARACTER 6

ITEM WEIGHT NUMERIC 3DEFAULT -1

ITEM CITY CHARACTER 15

RECORD SP

UNIQUE SNO PNO

ITEM SNO CHARACTER 5

ITEM PNO CHARACTER 6

ITEM QTY NUMERIC 5

CHECK QTY

>= 0

SET S_SP

OWNER S

ORDER SORTED DUPLICATES PROHIBITED

MEMBER SP

INSERTION STRUCTURAL SP. SNO

=S. SNO

RETENTION FIXED

KEY ASCENDING PNO

SET P_SP

OWNER P

ORDER SORTED DUPLICATES PROHIBITED


62

X 3004 - 1987

MEMBER SP

INSERTION STRUCTURAL SP. PNO

=P. PNO

RETENTION FIXED

KEY ASCENDING SNO

1.2

納入業者と部品の<サブスキーマ>の例

SUBSCHEMA SUPPLIERS OF SUPPLIERS_AND_PARTS

RECORD S

ITEM SSTATUS

ITEM CITY

RECORD SP

ALL

SET S_SP RENAMED SUPPLIES

1.3

納入業者と部品のプログラムの例

COBOL

プログラムの次の要素は,パリの各納入業者の状態値をパリの納入業者の最大の状態値に設定

する。

01 DB-STATUS PIC X (5).

01 S-STATUS PIC S9 (3) SIGN LEADING SEPARATE.

01 S-CITY PIC X (15).

01 M PIC S9 (3).

01 NOTFOUND PIC XXX.

01 LISTEMPTY PIC XXX.

MAINLINE.

CALL ’begin’ USING DB-STATUS.

PERFORM CHECK-FOR-DB-ERROR.

MOVE ’PARIS’ TO S-CITY

MOVE ZERO TO M.

MOVE ’NO’ TO NOTFOUND.

CALL ’find-first-s’ USING S-CITY DB-STATUS.

IF DB-STATUS

=’00100’

DISPLAY ’No suppliers for Paris’

STOP RUN.

PERFORM CHECK-FOR-DB-ERROR.

PERFORM UNTIL NOTFOUND

=’YES’

CALL ’keep-s’ USING DB-STATUS.

PERFORM CHECK-FOR-DB-ERROR.

CALL ’get-s’ USING S-STATUS DB-STATUS.

PERFORM CHECK-FOR-DB-ERROR.

IF S-STATUS GREATER THAN M

MOVE S-STATUS TO M.

CALL ’find-next-s’ USING S-CITY DB-STATUS.


63

X 3004 - 1987

IF DB-STATUS

=’00100’

MOVE ’YES’ TO NOTFOUND.

PERFORM CHECK-FOR-DB-ERROR.

END-PERFORM

MOVE ’NO’ TO LISTEMPTY.

PERFORM UNTIL LISTEMPTY

=’YES’

CALL ’find-free-modify’ USING M DB-STATUS.

IF DB-STATUS

=’00100’

MOVE ’YES’ TO LISTEMPTY.

PERFORM CHECK-FOR-DB-ERROR.

END-PERFORM

CALL ’commit-finish’ USING DB-STATUS.

PERFORM CHECK-FOR-DB-ERROR.

DISPLAY ’Processing complete’.

STOP RUN.

CHECK-FOR-DB-ERROR.

IF DB-STATUS NOT EQUAL ’00000’ AND ’00100’

DISPLAY ’Database error’ DB-STATUS

STOP RUN.

1.4

納入業者と部品の<モジュール>の例

MODULE

LANGUAGE COBOL

SUBSCHEMA SUPPLIERS OF SUPPLIERS_AND_PARTS

SET LISTA

PROCEDURE begin STATUS

READY S SHARED UPDATE

PROCEDURE ’find-first-s’

S_CITY CHARACTER 15

STATUS

FIND FIRST S WHERE CITY

=S_CITY

PROCEDURE ’find-next-s’

S_CITY CHARACTER 15

STATUS

FIND NEXT S WHERE CITY

=S_CITY

PROCEDURE ’keep-s’ STATUS

CONNECT S TO LISTA

PROCEDURE ’get-s’

S_STATUS NUMERIC 3

STATUS

GET S SET S_STATUS TO SSTATUS


64

X 3004 - 1987

PROCEDURE ’find-free-modify’

S_STATUS NUMERIC 3

STATUS

FIND FIRST S IN LISTA FOR UPDATE

DISCONNECT MEMBER LISTA FROM LISTA

MODIFY S SET SSTATUS TO S_STATUS

PROCEDURE ’commit-finish’ STATUS

COMMIT FINISH

2.

再帰親子集合の問題例  この参考は,規格の一部ではない。

次は,

“再帰親子集合”の問題に対する<スキーマ>,<サブスキーマ>,PL/I プログラム及び<モジ

ュール>の例である(

2

)

(

2

) PL/I

プログラム及び<モジュール>の<手続名>は,わかりやすさのために英小文字で表現し

ており,規格とは異なる。

2.1

再帰親子集合の<スキーマ>の例

SCHEMA ORGANIZATION

RECORD EMPLOYEE

UNIQUE ID

ITEM ID     CHARACTER 5

ITEM NAME        CHARACTER 20

ITEM MANAGERID CHARACTER 5

SET ORGANIZATION_STRUCTURE

OWNER EMPLOYEE

ORDER LAST

MEMBER EMPLOYEE

INSERTION STRUCTURAL MEMBER. MANAGERID

=OWNER. ID

RETENTION MANDATORY

2.2

再帰親子集合の<サブスキーマ>の例

SUBSCHEMA CHART OF ORGANIZATION

RECORD EMPLOYEE ALL

SET ORGANIZATION_STRUCTURE

2.3

再帰親子集合のプログラムの例

次の PL/I プログラムは,

ORGANIZATION_STRUCTURE

親子集合型の特定の親子集合実現値を上から下,

左から右の順番に並べる。

PRINT_CHART : PROC ;

DCL begin ENTRY (CHAR(5)) ;

DCL find_root_emp ENTRY (CHAR(5), CHAR(5)) ;

DCL get_employee ENTRY (CHAR(20)) ;

DCL find_next_as_member ENTRY (CHAR(5)) ;

DCL find_member_as_owner ENTRY ;


65

X 3004 - 1987

DCL find_owner_as_member ENTRY ;

DCL finish ENTRY (CHAR(5)) ;

DCL DB_STATUS CHARACTER (5) ;

DCL E_ID CHARACTER (5) ;

DCL E_NAME CHARACTER (20) ;

CALL begin (DB_STATUS) ;

IF DB_STATUS-

=’00000’ THEN GOTO DB_ERROR ;

GET LIST (E_ID) ;

CALL find_root_emp (E_ID, DB_STATUS) ;

IF DB_STATUS

=’00100’

THEN DO ;

PUT LIST (’employee’ || E_ID || ’not found’) ;

RETURN ;

END ;

IF DB_STATUS-

=’00000’ THEN GOTO DB_ERROR ;

CALL RECURSION ;

CALL finish (DB_STATUS) ;

IF DB_STATUS-

=’00000’ THEN GOTO DB_ERROR ;

PUT LIST (’Processing complete’) ;

RETURN ;

DB_ERROR ;

PUT LIST (’database error’ || DB_STATUS) ;

RETURN ;

RECURSION : PROCEDURE RECURSIVE ;

CALL get_employee (E_NAME) ;

PUT LIST (E_NAME) ;

CALL find_next_as_member (DB_STATUS) ;

DO WHILE DB_STATUS

=’00000’

CALL find_member_as_owner;

CALL RECURSION ;

CALL find_owner_as_member ;

CALL find_next_as_member (DB_STATUS) ;

END ;

END RECURSION ;

END PRINT_CHART ;

2.4

再帰親子集合の<モジュール>の例

MODULE

LANGUAGE PLI

SUBSCHEMA CHART OF ORGANIZATION

PROCEDURE begin STATUS


66

X 3004 - 1987

READY EMPLOYEE SHARED RETRIEVE

PROCEDURE find_root_emp

E_ID CHARACTER5

STATUS

FIND FIRST EMPLOYEE WHERE ID

=E_ID

PROCEDURE get_employee

E_NAME CHATACTER 20

GET EMPLOYEE SET E_NAME TO NAME

PROCEDURE find_next_as_member STATUS

FIND NEXT EMPLOYEE IN ORGANIZATION_STRUCTURE

AS MEMBER ORGANIZATION_STRUCTURE

PROCEDURE find_member_as_owner

FIND MEMBER ORGANIZATION_STRUCTURE

PROCEDURE find_owner_as_member

FIND OWNER ORGANIZATION_STRUCTURE

AS MEMBER ORGANIZATION_STRUCTURE

PROCEDURE finish STATUS

COMMIT FINISH

3.

部品展開の問題例

この参考は,規格の一部ではない。

次は,

“部品展開”の問題に対する<スキーマ>,<サブスキーマ>,FORTRAN プログラム及び<モジ

ュール>の例である(

3

)

(

3

) FORTRAN

プログラム及び<モジュール>の<手続名>は,わかりやすさのために英小文字で

表現しており,規格とは異なる。

3.1

部品展開の<スキーマ>の例

SCHEMA PARTS

RECORD PART

UNIQUE ID

ITEM ID   CHARACTER 5

ITEM NAME   CHARACTER 20

RECORD STRUCTURE

UNIQUE PARENTID COMPONENTID

ITEM PARENTID CHARACTER 5

ITEM COMPONENTID CHARACTER 5

ITEM QUANTITY INTEGER

SET USES

OWNER PART

ORDER NEXT

MEMBER STRUCTURE


67

X 3004 - 1987

INSERTION STRUCTURAL

STRUCTURE. PARENTID

=PART. ID

RETENTION MANDATORY

SET WHERE_USED

OWNER PART

ORDER NEXT

MEMBER STRUCTURE

INSERTION STRUCTURAL

STRUCTURE. COMPONENTID

=PART. ID

RETENTION MANDATORY

3.2

部品展開の<サブスキーマ>の例

SUBSCHEMA BILL_OF_MATERIALS OF PARTS

RECORD PART ALL

RECORD STRUCTURE ALL

SET USES

SET WHERE_USED

3.3

部品展開のプログラムの例

次の例で示す FORTRAN プログラムは,

“車軸”を作るのに必要なすべての組立部品,半組立部品,及

び部品を並べる。それは,統計を累積するのでもなく,十分な注文部品リストを作成するのでもない。

SUBROUTINE BOMEXP (PRTID)

EXTERNAL begin, fndprt, fndcn, fnddg, fndowu, test, finish

CHARACTER

*

5 PRTID, PID, CID, DBSTAT

CHARACTER

*

1 DBTST

INTEGER QTY

CALL begin (DBSTAT)

CALL CHKSTS (DBSTAT)

CALL fndprt (PRTID, DBSTAT)

IF (DBSTAT . EQ . ’00100’) THEN

WRITE (*, 10) PRTID

RETURN

END IF

10 FORMAT (’Part’, A5, ‘not found’)

CALL CHKSTS (DBSTAT)

CALL GETCMP

20 CALL fnddg (PID, CID, QTY, DBSTAT)

IF (DBSTAT .EQ. ’00100’) GOTO 30

CALL CHKSTS (DBSTAT)

WRITE (*, 25) PID, QTY, CID

25 FORMAT (’Each part’, A5, ’contains’, I3, ’of part’, A5)

CALL fndowu (DBSTAT)


68

X 3004 - 1987

CALL CHKSTS (DBSTAT)

CALL test (DBTST, DBSTAT)

CALL CHKSTS (DBSTAT)

IF (DBTST . EQ . ’0’) THEN CALL GETCMP

GOTO 20

30 CALL finish (DBSTAT)

CALL CHKSTS (DBSTAT)

WRITE (*, 35)

35 FORMAT (’Processing complete’)

RETURN

SUBROUTINE GETCMP

CHARACTER*5 DBSTAT

50 CALL fndcn (DBSTAT)

IF (DBSTAT . EQ . ’00000’) GOTO 50

CALL CHKSTS (DBSTAT)

RETURN

END

SUBROUTINE CHKSTS (DBSTAT)

CHARACTER*5 DBSTAT

IF (DBSTAT . EQ . ’00000’ ) RETURN

40 WRITE (*, 45) DBSTAT

45 FORMAT (’Database error’, A5)

STOP

END

END

3.4

部品展開の<モジュール>の例

MODULE

LANGUAGE FORTRAN

SUBSCHEMA BILL_OF_MATERIALS OF PARTS

SET STRUCTURE_LIST

PROCEDURE begin STATUS

READY PART SHARED RETRIEVE

READY STRUCTURE SHARED RETRIEVE

PROCEDURE fndprt

PART_ID CHARACTER 5

STATUS

FIND FIRST PART WHERE ID

=PART_ID

PROCEDURE fndcn STATUS

FIND NEXT STRUCTURE IN USES

CONNECT STRUCTURE TO STRUCTURE_LIST


69

X 3004 - 1987

PROCEDURE fnddg

PARENT_ID CHARACTER 5

COMPONENT_ID CHARACTER 5

COMPONENT_QTY INTEGER

STATUS

FIND FIRST IN STRUCTURE_LIST

DISCONNECT SESSION FROM STRUCTURE_LIST

GET STRUCTURE

SET PARENT_ID TO PARENTID

SET COMPONENT_ID TO COMPONENTID

SET COMPONENT_QTY TO QTY

PROCEDURE fndowu STATUS

FIND OWNER WHERE_USED

PROCEDURE test TEST STATUS

TEST SET EMPTY USES

PROCEDURE finish STATUS

COMMIT FINISH


70

X 3004 - 1987

データベース言語調査研究委員会メンバ(敬称略・順不同)

氏名

所属

(委員長)

穂  鷹  良  介

筑波大学社会工学系

(幹事)

鈴  木  健  司

日本電信電話株式会社情報通信処理研究所

芝  野  耕  司

日本アイ・ビー・エム株式会社東京基礎研究所

(委員)

井手下  忠  良

日本電気株式会社基本ソフトウェア開発本部

伊  藤  彰  一

工業技術院標準部

井  原      実

株式会社東芝府中工場

植  村  俊  亮

工業技術院電子技術総合研究所

大  島      功

東京電力株式会社情報システム部

小  澤      弘

野村コンピュータシステム株式会社技術部

片  岡  信  弘

三菱電機株式会社計算機製作所

黒  川  恒  雄

日本銀行電算情報局

鴻  池  光  夫

富士通株式会社情報システム事業本部

原          潔

日本ユニバック株式会社プロダクト本部

疋  田  定  幸

沖電気工業株式会社コンピュータシステム開発本部

横  井      豊

経済企画庁長官官房

横  山  一  郎

株式会社日立製作所ソフトウェア工場

(事務局)

川  邊  昭  治

財団法人日本規格協会

データベース言語調査研究委員会 NDL 分科会メンバ(敬称略・順不同)

氏名

所属

(主査)

鈴  木  健  司

日本電信電話株式会社情報通信処理研究所

石  井  俊  次

三菱電機株式会社計算機製作所

井  上  浩  弓**

日本電気株式会社基本ソフトウェア開発本部

高  橋  利  彦*

日本電気株式会社基本ソフトウェア開発本部

原          潔

日本ユニバック株式会社プロダクト本部

穂  鷹  良  介

筑波大学社会工学系

三  浦  孝  夫*

三井造船株式会社電算センター

横  井      豊

経済企画庁長官官房

横  山  一  郎**

株式会社日立製作所ソフトウェア工場

米  田      茂*

株式会社日立製作所システム開発研究所

(事務局)

川  邊  昭  治

財団法人日本規格協会

ここで,*は 1985 年度,**は 1986 年度の検討メンバである。オブザーバ参加は,次のとおりである。

塚  崎  義  樹

センチュリリサーチセンター株式会社カリネット部