PR

 データベースオブジェクトには,表,ビュー,索引,プロシージャなどがあります。

 表はデータを格納するオブジェクトです。次の構文で作成することができます。

CREATE TABLE 表名
( 列名  データ型[(有効桁数)] [ 制約 ]
  [ , 列名  データ型[(有効桁数)] [ 制約 ], ・・・] )
[ TABLESPACE 表領域名 ] ;
リスト1●表作成構文

 表の作成時には,次のことを定義できます。

  • 列名とそのデータ型,有効桁数
  • 制約

 Oracleが提供する主なデータ型には次のものがあります(表1)。

表1●主なデータ型
データ型説明
NUMBER数値
DATE日付と時刻
TIMESTAMP日付と最大9桁までの少数秒を含む時刻
WITH TIMEZONE
WITH LOCAL TIMEZONE
CHAR固定長文字列
VARCHAR2可変長文字列
LONG可変長文字列。最大2GB
CLOB可変長文字列。最大4GB
BLOBバイナリ。最大4GB
BFILE最大4GB

 どういうデータの場合,どのデータ型が最適か,考えておきましょう。住所などの長さが決まらない文字列はCHARではなく,VARCHAR2が適しています。2GBを越える長い文章,例えば論文などを格納する場合は,CLOBがよいでしょう。

 制約には,次のものがあります(表2)。

表2●制約の種類
制約説明
NOT NULLNULLを許可しない
UNIQUE重複を許可しない。一意キー制約
PRIMARY KEY識別子。主キー制約。一意でNULLでない値を許可する
FOREIGN KEY参照整合性制約(参照先に存在する値を許可する)。外部キー制約
CHECK指定した条件を満たしているか評価する

 1つの列に複数の制約を指定することが可能です。例えば,NOT NULL制約とFOREIGN KEY制約を同時に設定することができます。

 UNIQUE制約またはPRIMARY KEY制約を定義すると,自動的に「一意索引」が作成されます。また,FOREIGN KEYが参照する列は,異なる表の列でも同じ表の異なる列でも構いません。ただし,参照先の列には,UNIQUEまたはPRIMARY KEY制約が定義されている必要があります。

 制約を定義したCREATE TABLE文を次に示します。

CREATE TABLE emp
(empno NUMBER CONSTRAINT emp_pk PRIMARY KEY
,ename VARCHAR2(20) CONSTRAINT emp_nm_nn NOT NULL
,ext VARCHAR2(20) CONSTRAINT emp_ext_u UNIQUE
,sal NUMBER CONSTRAINT emp_sal_ck CHECK(sal > 0)
,mgr NUMBER CONSTRAINT emp_mgr_fk REFERENCES emp(empno)); 
リスト2●制約(列制約構文を使用)を定義したCREATE TABLE文
※empno:社員番号,ename:社員名,ext:内線,sal:給与,mgr:上司の社員番号

CREATE TABLE emp
(empno NUMBER
,ename VARCHAR2(20) CONSTRAINT emp_nm_nn NOT NULL
,ext VARCHAR2(20) 
,sal NUMBER 
,mgr NUMBER 
,CONSTRAINT emp_pk PRIMARY KEY(empno)
,CONSTRAINT emp_ext_u UNIQUE(ext)
,CONSTRAINT emp_sal_ck CHECK(sal > 0)
,CONSTRAINT emp_mgr_fk FOREIGN KEY(mgr) REFERENCES emp(empno)); 
リスト3●制約(表制約構文を使用)を定義したCREATE TABLE文