ORACLE/TABLE編

オラクルちょこっとリファレンス

HOME > TABLE編

TABLE(表)

表はデータベースで最も基本的なオブジェクトで、実際にデータを格納する時は表にデータを格納するということになります。

表の作成

表の作成には、CREATE TABLE句を使用します。

CREATE TABLE構文
CREATE TABLE <表名>
  (列名 データ型 [列制約] [, 列名 データ型 [列制約], ...]
  [表制約]
  )
  [TABLESPACE 表領域名]
  [PCTFREE 空き領域割合]
  [PCTUSED 使用領域割合]
  [STRAGE
    (
      [INITIAL 初期エクステントサイズ]
      [NEXT 増分エクステントサイズ]
      [MINEXTENTS 最小エクステント数]
      [MAXEXTENTS 最大エクステント数|UNLIMITED]
      [PCTINCREASE エクステントサイズ拡大率]
      [BUFFER_POOL {DEFAULT | KEEP | RECYCLE}]
      [FREELISTS 空きリスト数]
    )
  ]
  [LOGGING | NOLOGGING]
  [CACHE | NOCACHE]
;

パラメータ 説明
データ型 データ型編をご覧ください。
列制約/表制約 制約編をご覧ください。
TABLESPACE 表を作成する表領域を指定する
PCTFREE 空き領域割合を指定する
 デフォルト:10
PCTUSED 使用領域割合を指定する
 デフォルト:40
 INITIAL セグメントに割り当てる初期エクステントのサイズを指定する(K | M)
 NEXT 増分エクステントのサイズを指定する(K | M)
 MINEXTENTS 最小エクステントの数を指定する
(TRUNCATEされた時のエクステント数)
 MAXEXTENTS 最大エクステントの数を指定する
UNLIMITEDを指定すると無制限。
 PCTINCREASE エクステントの拡大率を指定する
 BUFFER_POOL データブロックが格納されるバッファプールを指定する。
 DEFAULT:標準バッファキャッシュ
 KEEP:KEEPバッファキャッシュ
 RECYCLE:RECYCLEバッファキャッシュ
 FREELISTS 空きリストの数を指定する。
(空きリストの競合が発生している場合にこの値を大きくする)
LOGGING/NOLOGGING LOGGING:表の記憶特性をREDOログに記録する(デフォルト)
NOLOGGING:表の記憶特性をREDOログに記録しない
CACHE/NOCACHE CACHE:表をデータベースバッファキャッシュにキャッシュさせる
NOCACHE:表をデータベースバッファキャッシュにキャッシュさせない(デフォルト)
(例1)通常のテーブル作成
CREATE TABLE <スキーマ名>.<テーブル名> ( カラム名 データ型 PRIMARY KEY, カラム名 データ型 NOT NULL, カラム名 データ型 REFERENCES(<テーブル名>.<カラム名>) );
(例2)他の表を元にして表を作成
CREATE TABLE <スキーマ名>.<テーブル名> AS SELECT * FROM <コピー元の表>;

REDOログの生成を変更する場合は表を作成後に以下のコマンドを実行します。

REDOログ設定例文
ALTER TABLE [スキーマ名].テーブル名 [LOGGING | NOLOGGING]; --★テーブル変更時にREDOログを生成したくない場合はNOLOGGINGを指定します。

CREATE TABLEの実行には以下の権限が必要です。

  • 自スキーマに作成する場合:「CREATE TABLE」システム権限
  • 他スキーマに作成する場合:「CREATE ANY TABLE」システム権限

列の追加・削除・変更

既存の表に列の追加・削除をするには、ALTER TABLE句を使用します。

ALTER TABLE ~ ADD構文 (列の追加)
ALTER TABLE <表名>
  ADD (列名 データ型 [, 列名 データ型, ...]);

ALTER TABLE ~ DROP構文 (列の削除)
ALTER TABLE <表名>
  DROP COLUMN 列名 [CASCADE CONSTRAINTS];

ALTER TABLE ~ MODIFY構文 (列の変更)
ALTER TABLE <表名>
  MODIFY (列名 データ型 [, 列名 データ型, ...]);

パラメータ 説明
CASCADE CONSTRAINTS 指定すると、削除した列を参照していた制約も同時に削除する。
ALTER TABLE例文
--(例)列(列名:column2/型:VARCHAR2(20))をtest_tab表に追加する。 ALTER TABLE test_tab ADD (column2 VARCHAR2(20)); --(例)列(列名:tel/型:VARCHAR2(15))をtest_tab表から削除する。 ALTER TABLE test_tab DROP COLUMN tel; --(例)列(列名:tel/型:VARCHAR2(15))の制約にNOT NULLを設定する。 ALTER TABLE test_tab MODIFY tel VARCHAR2(15) NOT NULL;

以下の変更はできません。変更したい時はデータを修正してから変更してください。

  • null値が存在する時にNOT NULL制約を設定する。
  • 入っている値のサイズよりも小さいサイズを設定する。

表名の変更

表名の変更には、RENAME句を使用します。

RENAME構文
RENAME 旧テーブル名 TO 新テーブル名;

RENAME例文
--(例)表(test_tab)を、my_tabに名称変更する。 RENAME test_tab TO my_tab;

表の削除

表の削除には、DROP TABLE句を使用します。

DROP TABLE構文
DROP TABLE <表名> [CASCADE CONSTRAINTS] [PURGE];

パラメータ 説明
CASCADE CONSTRAINTS 指定すると、削除した列を参照していた制約も同時に削除する。
PURGE (※10g以降)指定すると、リサイクルビンを作成しない。
DROP TABLE例文
--(例)表(表名:test_tab)を削除する。 DROP TABLE test_tab CASCADE CONSTRAINTS;

Oracle10gからDROP TABLEを実行してもすぐには削除されずに、ゴミ箱(リサイクルビン)に移されます。 (Windowsのゴミ箱と同じような仕組みです)

リサイクルビンに移されたTABLEは ”BIN$xxx~” のような名称に変換されます。
「SHOW RECYCLEBIN;」 コマンドで変換前後のテーブル名の対応を確認できます。
「FLASHBACK TABLE 変換後テーブル名 TO BEFORE DROP;」コマンドで削除したテーブルを復活させることができます。
「PURGE USER_RECYCLEBIN;」コマンドでリサイクルビンを削除することができます。

詳しくは→リサイクルビン編をご覧ください。

列に未使用マークを付ける

列に未使用マークを付けると、対象列を削除したのと同じような効果があります。

では、列の削除と何が違うのかというと、列の削除は物理削除なのでデータが沢山ある場合には結構重い処理となり時間が掛かります。 それに対して未使用マークでの列の削除は論理削除なので、時間をかけずに削除できるというメリットがあります。

未使用マーク構文
ALTER TABLE <表名> SET UNUSED COLUMN <列名>;

未使用マークを付ける例文
--(例)表(表名:test_tab)の列(列名:col1)を削除する。 ALTER TABLE test_tab SET UNUSED COLUMN col1;

テーブルや列にコメントを付ける

テーブルや列に対してコメントを付けることができます。コメントを付けておくと、見返した時にとても分かりやすくなるので付けておくことをお勧めします。

テーブルや列にコメントを付ける構文
--テーブルにコメントを付ける
COMMENT ON TABLE <テーブル名> IS '<コメント>';

--列にコメントを付ける
COMMENT ON COLUMN <テーブル名>.<列名> IS '<コメント>';

コメントを付ける例文
--(例)m_testテーブルに、「テストマスタ」とコメントを付ける。 COMMENT ON TABLE m_test IS 'テストマスタ'; --(例)m_testテーブルのname列に、「名前」とコメントを付ける。 COMMENT ON TABLE m_test.name IS '名前';

テーブルの情報を表示する

テーブルの情報を表示するには ALL_TABLESデータディクショナリビューを検索します。

テーブルの情報を表示する
SELECT * FROM ALL_TABLES;

データディクショナリビューには、DBA_やUSER_で始まるものもあります。
 違いは参照できる範囲が異なります。

【ALL_TABLESの主要カラム】
カラム内容
OWNERテーブルの所有者
TABLE_NAMEテーブル名
TABLESPACE_NAMEテーブルが所属する表領域名
STATUSテーブルが有効か無効かどうか
(VALID:有効 INVALID:無効)
LOGGING表の変更がロギングされるかどうか
(YES:ロギングされる NO:ロギングされない)
BACKED_UP前回の変更以降に表がバックアップされているかどうか
NUM_ROWS表に存在するデータの行数
※リアルタイムでないので、実際の行数と差異がある場合がある
LAST_ANALYZED最後に分析された日時
TEMPORARY一時表かどうか
(一時表である:Y 一時表でない:N)
DROPPEDごみ箱にあるかどうか
(YES/NO)
READ_ONLY読取専用かどうか
(YES/NO)

ここで紹介しているカラムは、主要なカラムのみです。

ToTop