ここでは,DABroker for C++から繰り返し列へアクセスするための基礎知識として,SQL文を使った,繰り返し列のデータ操作について説明します。
繰り返し列は,図1-4に示すように,複数の要素(データ)を一つのフィールド値として持てるフィールドのことです。図の例では,資格及び趣味のフィールドを繰り返し列としています。1レコード目の資格フィールド(繰り返し列)には三つの要素があるといい,要素を特定するために,配置されている順に要素番号が1から付けられます。また,情報処理第1種,映画鑑賞,旅行などの各データを要素の値といいます。例えば,1レコード目の資格フィールドで,要素番号1の要素の値は「情報処理第1種」となります。
図1-4 繰り返し列を使ったテーブル
次に,上記の社員表テーブルを作成する場合の,テーブル定義及び複数列インデックス定義のSQL文の例を示します。
CREATE TABLE 社員表
(氏名ID CHAR(4) NOT NULL, --NULL値不可
性別 SMALLINT(1) NOT NULL, --NULL値不可
資格 NCHAR(15) ARRAY[3],
--フィールド値として持てる最大要素数3
趣味 NCHAR(15) ARRAY[4]);
--フィールド値として持てる最大要素数4
CREATE INDEX 資格趣味 ON 社員表(資格,趣味);
以下に,繰り返し列のあるテーブルへのデータアクセスについて説明します。
繰り返し列の各要素の値を検索の条件として利用できます。SQL文は以下のように指定します。
// 資格の「ネットワーク」,趣味の「旅行」の,両方の条件を満たす氏名IDを検索
SELECT 氏名ID FROM 社員表
WHERE ARRAY(資格,趣味) [ANY] ( 資格 =N'ネットワーク'
AND 趣味 =N'旅行' );
検索の条件に繰り返し列の要素の値を使う場合は,そのフィールドに対して複数列インデクスが定義されている必要があります。
繰り返し列を持つレコードを追加する際には,その要素の指定順序を考慮する必要があります。ARRAYで指定した順に要素は配置されます。
// 社員IDがZ004のレコードを追加
INSERT INTO 社員表
VALUES ('Z004',
1,
ARRAY[N'英語検定',N'ネットワーク']
ARRAY[N'パソコン',N'旅行',N'音楽鑑賞',N'ギター']);
繰り返し列を更新する場合はSQLのUPDATE文を使いますが,繰り返し列の更新は,次の三つの場合に分けられます。
フィールド値に要素を追加します。[*]を指定することによって,要素は最後に追加されます。
(例)
// Z002レコードの資格フィールドの最後の要素位置に,「データベース」を追加
UPDATE 社員表
ADD 資格[*] =ARRAY [N'データベース']
WHERE 氏名ID =Z002;
既存の要素を更新します。更新する要素の位置は,繰り返し列内の要素番号を使って指定します。
(例)
// z001の趣味を「映画鑑賞」から「インターネット」へ変更
UPDATE 社員表
SET 趣味[1] =ARRAY [N'インターネット']
WHERE 氏名ID =Z001;
要素を削除する場合は,削除する要素の要素番号を指定します。要素を削除した場合は,その要素以下の要素番号は繰り上がります。したがって,要素番号1の要素を削除した場合,要素番号2の要素が1になります。
(例)
// Z002の趣味「音楽鑑賞」を削除
UPDATE 社員表
DELETE 趣味[1]
WHERE 氏名ID =Z002;
レコードを削除する場合,繰り返し列を持たない場合と同様にSQLのDELETE文を指定します。
(例)
// 資格の「ネットワーク」,趣味の「旅行」の,両方の条件を満たすレコードを削除
DELETE FROM 社員表
WHERE ARRAY(資格,趣味) [ANY] ( 資格 =N'ネットワーク'
AND 趣味 =N'旅行' );