2.8.3 データベースアクセス時の制限

XDM/SDのデータベースにアクセスする場合,アクセスできるテーブルやレコードに幾つかの制限があります。ここでは,データ操作ごとの制限について説明します。

以降の説明で使うXDM/SDのレコードの内容,ACE3のテーブル定義を次に示します。

[図データ]

 

[図データ]

<この項の構成>
(1) レコードの検索
(2) レコードの追加
(3) レコードの削除
(4) レコードの更新

(1) レコードの検索

次のテーブルのレコードを検索できます。

RDML文のSELECT文で,WHERE句を指定して検索した場合,WHERE句に指定した検索条件に該当するデータを取得できます。

WHERE句を指定しない場合,SELECT文で指定したフィールド名のすべてのデータが取得されます。

(例1)
WHERE句に指定した条件で検索します。

SELECT A1,B2,B3 FROM OWNER_MEMBER_TABLE WHERE A1=1 AND B2='A'

 
検索結果
[図データ]

(2) レコードの追加

次のテーブルのレコードを追加できます。

親レコード型だけで定義したテーブルにレコードを挿入した場合,XDM/SD上には子レコードを持たない親レコードが追加されます。

(例1)
親レコード型だけで定義したテーブルにレコードを追加します。

INSERT INTO OWNER_TABLE VALUES(4,'え','ニ')

 
テーブル上の実行結果
[図データ]

親レコード型と子レコード型を用いて定義したテーブルにレコードを追加する場合は,テーブルに定義した親レコード型の構成要素が,テーブル定義時にプライマリカラムとしたテーブルであることが必要です。

親レコード型と子レコード型を用いて定義したテーブルにレコードを追加すると,INSERT文のVALUES句に指定された挿入値をデータとする親レコードと,親子関係を持つ子レコードが追加されます。

ただし,親レコードはプライマリカラムのため,親レコードに重複するレコードは追加できません。

(例2)
親レコード型と子レコード型両者で定義したテーブルにレコードを追加します。

INSERT INTO OWNER_MEMBER_TABLE(A1,B2,B3) VALUES(4,'D',109)

 
テーブル上の実行結果
[図データ]
[図データ]
[図データ]

他のレコードと親子関係を持たないレコード型で定義したテーブルにレコードを追加する場合,XDM/SD上ではINSERT文のVALUES句に指定された挿入値をデータとするレコードが追加されます。

レコードを追加したとき,データを入力しないフィールドには省略時の設定値が入ります。テーブルの定義にないXDM/SDのレコード型の項目にも省略時の設定値が適用されます。

例えば,親レコード型のA1,A2で定義したテーブルにINSERT文でレコードを追加した場合,追加した親レコードのA3に ’’(空白)が入ります。

省略時の設定値についてはマニュアル「XDM E2系 システム定義」を参照してください。

(3) レコードの削除

次のテーブルのレコードを削除できます。

親レコードだけで定義したテーブルのレコードを削除した場合,XDM/SD上では削除した親レコードと親子関係にあった子レコードの動作はスキーマ定義の保存モードの指定に従います。

保存モードについてはマニュアル「XDM E2系 解説」を参照してください。

(例1)
親レコード型だけで定義したテーブルのレコードを削除します。

DELETE FROM OWNER_TABLE WHERE A1=3

 
テーブル上の実行結果
[図データ]

子レコード型だけで定義したテーブルのレコードを削除した場合,一つの子レコードを削除するとその子レコードだけ削除され,親レコードは削除されません。

親レコードに属する子レコードをすべて削除しても,親レコードは削除されません。

(例2)
子レコード型だけで定義したテーブルのレコードを削除します。

DELETE FROM MEMBER_TABLE WHERE B2='A' OR B2='AA' OR B2='AAA'

 
テーブル上の実行結果
[図データ]

他のレコードと親子関係を持たないレコード型で定義したテーブルのレコードを削除した場合,XDM/SD上でも該当するレコードが削除されます。

(4) レコードの更新

次のテーブルのレコードを更新できます。

親レコード型だけで定義したテーブルの値を更新した場合,XDM/SD上では該当する親レコードのデータが更新されます。

ただし,CALCキー,シーケンシャルインデックスや子レコードがある場合の接続キーなどの変更はできません。

(例1)
親レコード型だけで定義したテーブルの値を更新します。

UPDATE OWNER_TABLE SET A2='ア' WHERE A2='あ'

 
テーブル上の実行結果
[図データ]

子レコード型だけで定義したテーブルの値を更新した場合,XDM/SD上では該当する子レコードのデータが更新されます。

(例2)
子レコード型だけで定義したテーブルの値を更新します。

UPDATE MEMBER_TABLE SET B2='α' WHERE B2='A'

 テーブル上の実行結果
[図データ]

親レコード型と子レコード型を用いて定義したテーブルのレコードを更新する場合は,テーブルに定義した親レコード型の構成要素が,テーブル定義時にプライマリカラムとしたテーブルである必要があります。この場合,子レコードの値を更新できます。

プライマリカラムである構成要素は値を更新できないので,親レコードの値は更新できません。

(例3)
親レコード型と子レコード型を用いて定義したテーブルの値を更新します。

UPDATE OWNER_MEMBER_TABLE SET B2='α' WHERE A1=1 AND B3=100

 テーブル上の実行結果
[図データ]

他のレコードと親子関係を持たないレコード型で定義したテーブルの値を更新した場合,XDM/SD上では該当するデータが更新されます。