Oracle:表(テーブル)操作に関するSQL | けしくんのWebLog

けしくんのWebLog

自分が考えたこと、調べたことを忘れずに残しておくため、Web上にLogを残していきます。

よく使う表(テーブル)関するSQLのまとめ。
大抵はこれで事足りるはず。細かい設定がしたければ、マニュアルをみる。

よく使うOracle SQL/コマンドまとめ

表の作成
CREATE TABLE テーブル名
( 列名 データ型 制約,
  列名 データ型 制約,
  …
 CONSTRAINT 主キー名 PRIMARY KEY(列名,列名,…)
)
TABLESPACE 表領域名;
※TABLESPACE句を省略すると、SQLを実行したユーザーのデフォルト表領域内に作成される。制約は、NOT NULL制約など。後から指定も可能。
CONSTRAINT 主キー名 PRIMARY KEY(…):主キーを指定する場合に必要。
☆指定できる主な型と説明
型名 説明
CHAR(n) 文字列固定長(n bytes)
データ長に関係なくそのサイズ分だけ使用する(最大2000)。
VARCHAR2(n) 文字列可変長(n bytes)
実際に入っているデータ長だけサイズを使用する(最大4000)。
NUMBER 数値
小数の精度を意識する場合は NUMBER(n,m) n:精度、m:桁数 と指定する。
DATE 日付
年、月、日、時、分、秒をもつ。7bytesと考える。
TIMESTAMP DATE+秒以下の小数部
デフォルト精度はマイクロ秒。
CLOB ラージオブジェクト(可変長文字列)
標準ブロックサイズ×4GB-1が最大。
BLOB ラージオブジェクト(可変長バイナリ)
標準ブロックサイズ×4GB-1が最大。

表の削除
DROP TABLE テーブル名
CASCADE CONSTRAINT
PURGE;
※CASCADE CONSTRAINT句:同時に表に対する制約も削除する場合に指定。
PURGE:ゴミ箱機能が有効(初期化パラメータ:RECYCLEBIN が ON)な場合でも、ゴミ箱に入れずに完全に削除する場合に指定。

表の変更(列の追加と変更)
ALTER TABLE テーブル名 ADD|MODIFY
( 列名 型名 制約,
 列名 型名 制約,
 …
);
※列の指定方法は表を作るときと同じ。

表データの断片化解消
ALTER TABLE テーブル名 ENABLE ROW MOVEMENT;
ALTER TABLE テーブル名 SHRINK SPACE CASCADE;
ALTER TABLE テーブル名 ENABLE ROW MOVEMENT;
※上記3つのSQLで1セット。行ロックを取得して実行するためオンラインでも実行可能。
CASCADE句:依存するオブジェクトもSHRINKする。

表の移動(表領域の変更)
ALTER TABLE テーブル名 MOVE TABLESPACE 表領域名;
※表の断片化解消するときにも使える。HWMも変わる。

表の統計情報取得
EXECUTE DBMS_STATS.GATHER_TABLE_STATS('オーナー名','テーブル名');

表に格納された列データのカーディナリティ確認
SELECT TABLE_NAME, COLUMN_NAME, NUM_DISTINCT
FROM DBA_TAB_COLUMNS
WHERE TABLE_NAME='表名'
ORDER BY COLUMN_NAME;
※カーディナリティとは、列値の種類数のこと。対象となる表の統計情報が収集されていないと正しい値を得られない。

よく使うOracle SQL/コマンドまとめ