11.1.18 配列型の列を定義した実表の運用
配列型の列を定義した実表の運用方法を説明します。
なお,ここでは,実表を表と表記しています。
(1) 表の定義
CREATE TABLE文で表を定義します。定義する表に配列型の列を定義する場合は,CREATE TABLE文の列定義で,列のデータ型に配列型(ARRAY型)を指定します。配列型の列を定義した商品表(PRODUCT)の定義例を次に示します。
- (例)
-
商品表(PRODUCT)の定義条件を次に示します。
-
SIZE列(サイズ)とCOLOR列(色)を配列型の列として定義します。
-
SIZE列は,要素データ型をCHAR(1)とし,最大要素数を3とします。
-
COLOR列は,要素データ型をVARCHAR(8)とし,最大要素数を6とします。
CREATE TABLE文の指定例
CREATE TABLE "PRODUCT" ("PCODE" CHAR(4), "PNAME" VARCHAR(20), "SIZE" CHAR(1) ARRAY[3], ...1 "PRICE" INTEGER, "COLOR" VARCHAR(8) ARRAY[6]) ...2 IN "DBAREA01" CHUNK=120 STORAGE FORMAT COLUMN ...3
[説明]
-
配列型の列であるSIZE列を定義します。
-
配列型の列であるCOLOR列を定義します。
-
配列型の列を定義した表は,カラムストア表として定義する必要があります。
-
- 重要
-
配列型の列を定義した表を定義する前に,「5.2.13 配列型の列の定義【カラムストア表】」を参照して制限事項などを確認してください。
- メモ
-
CREATE TABLE文の指定形式および各オプションの詳細については,マニュアルHADB SQLリファレンスのCREATE TABLE(表の定義)を参照してください。
(2) 表の検索
配列型の列を定義した表の検索例を次に示します。
- (例1)
-
商品表(PRODUCT)から,商品名(PNAME)とサイズ(SIZE)を検索します。SIZE列は配列型の列です。
SELECT文の指定例
SELECT "PNAME","SIZE" FROM "PRODUCT"
上記の下線部分のように配列型の列名だけを指定すると,SIZE列中の配列要素の値がすべて出力されます。
検索結果
- (例2)
-
商品表(PRODUCT)から,商品名(PNAME)とサイズ(SIZE)の先頭の配列要素を検索します。
SELECT文の指定例
SELECT "PNAME","SIZE"[1] FROM "PRODUCT"
上記の下線部分のように,配列型の列名と,検索対象とする配列要素の要素番号を指定します。この例の場合,先頭の配列要素を検索するため,要素番号に1を指定しています。下線部分の指定を配列要素参照といいます。
検索結果
- (例3)
-
商品表(PRODUCT)から,色(COLOR)の配列要素に'BLUE'がある商品名(PNAME)と単価(PRICE)を検索します。
SELECT文の指定例
SELECT "PNAME","PRICE" FROM "PRODUCT" WHERE "COLOR"[ANY] = 'BLUE'
COLOR列の全配列要素を検索対象とする場合は,上記の下線部分のように,配列型の列名と[ANY]を指定します。下線部分の指定を配列要素参照といいます。
検索結果
- メモ
-
配列要素参照の指定形式の詳細については,マニュアルHADB SQLリファレンスの配列要素参照を参照してください。
(3) 表の全行削除
表の全行を削除する場合は,TRUNCATE TABLE文を実行します。
- (例)
-
商品表(PRODUCT)の全行を削除します。
TRUNCATE TABLE "PRODUCT"
- 重要
-
配列型の列を定義した表には,DELETE文を実行できません。また,INSERT文およびUPDATE文も実行できません。
(4) 最大要素数の変更
配列型の列の最大要素数を変更する場合は,ALTER TABLE文を実行します。
- (例)
-
商品表(PRODUCT)のSIZE列の最大要素数を5に変更します。
ALTER TABLE "PRODUCT" CHANGE COLUMN "SIZE" ARRAY[5]
- 重要
-
-
最大要素数を大きくすることだけができます。最大要素数を小さくすることはできません。
-
表を定義したHADBユーザだけが,ALTER TABLE文で最大要素数を変更できます。
-
- メモ
-
ALTER TABLE文の指定形式および規則については,マニュアルHADB SQLリファレンスのALTER TABLE(表定義の変更)を参照してください。
なお,最大要素数を変更する場合,次に示す影響があります。影響がないかどうかを確認してください。
-
最大要素数を変更した表に依存するビュー表がある場合
最大要素数を変更した表に依存するビュー表は無効化されます。ビュー表の定義時に,最大要素数を変更した列名を明示的に指定しているかどうかに関係なく,ビュー表は無効化されます。
無効化されるビュー表(依存するビュー表)を調べる場合は,「11.2.11 依存するビュー表を確認する方法」を参照してください。無効化されるビュー表がある場合は,ALTER TABLE文で最大要素数を変更したあとで,ビュー表の無効化を解除する必要があります。
ビュー表の無効化を解除する方法については,「11.2.8 ビュー表の無効化を解除する方法」の「(4) ALTER TABLE文で配列型の列の最大要素数を変更したことによってビュー表が無効化された場合」を参照してください。
また,次に示す場合は,ALTER TABLE文で最大要素数を変更できません。
-
操作対象の実表が更新不可状態になっている場合
実表の更新不可状態を解除したあとで,ALTER TABLE文で最大要素数を変更してください。実表の更新不可状態を解除する方法については,「15.8.1 実表が更新不可状態になった場合」の「(1) 実表の更新不可状態を解除する方法」を参照してください。
(5) 配列型の列の追加
表に配列型の列を追加する場合は,ALTER TABLE文を実行します。
- (例)
-
商品表(PRODUCT)に,配列型の列であるITEM_CODE列を追加します。ITEM_CODE列の要素データ型はCHAR(8),最大要素数は10とします。
ALTER TABLE "PRODUCT" ADD COLUMN "ITEM_CODE" CHAR(8) ARRAY[10]
- 重要
-
-
カラムストア表に配列型の列を追加できます。ローストア表には配列型の列を追加できません。
-
B-treeインデクスまたは一意性制約を定義している表には,配列型の列を追加できません。
-
- メモ
-
-
表に列を追加する際の留意事項については,「11.1.2 実表に列を追加する方法」を参照してください。
-
ALTER TABLE文の指定形式および規則については,マニュアルHADB SQLリファレンスのALTER TABLE(表定義の変更)を参照してください。
-