2020年3月26日木曜日

Alter Oracle Table Add/Modify/Rename/Drop Columns

Oracle Table Columns 変更

  1. カラムの追加 / ALTER TABLE ADD column(s)
    表定義の最後にのみ追加可能。表の途中への挿入や列の順番の変更や入れ替えはできない。
    ALTER TABLE my_table ADD ( time_col TIMESTAMP(3) ) ;

  2. カラムの定義の変更 / ALTER TABLE MODIFY column(s)

    データが存在する場合、直接MODIFYは出来ない、DROPしてから、ADD
    ALTER TABLE IAMGE_INFO DROP COLUMN IMAGE_DATA 
    ALTER TABLE IMAGE_INFO ADD (IMAGE_DATA LONG RAW)

    NULL 制約の設定と解除
    ALTER TABLE table_name MODIFY ( char_col NULL )
    ALTER TABLE my_table MODIFY ( char_col  NOT NULL ) ;
    

    デフォルト値の変更と削除
    ALTER TABLE my_table MODIFY ( char_col  DEFAULT 'abc' ) ;

    カラムの長さ、桁数、スケール、精度の変更
    ALTER TABLE my_table MODIFY (
        char_col    VARCHAR2(50),
        number_col  NUMBER(14)
    );

  3. テーブル名、カラム名の変更 / ALTER TABLE RENAME [column]

    列名の変更
    ALTER TABLE my_table RENAME COLUMN time_col TO date_col ;

    列の削除 (DROP)
    ALTER TABLE my_table DROP (
        char_col , number_col
    )
    -- 以下はオプションなので必須ではない
    CASCADE CONSTRAINT INVALIDATE;
    CASCADE CONSTRAINT : 列に付随する制約(主キー、ユニークキー、チェックなど)を削除する。INVALIDATE : 依存関係にあるオブジェクトに対し再帰的に無効化マーク(INVALID) を付ける。CHECKPOINT : UNDO に蓄積されるログを抑制するため、指定行数毎に チェックポイント を発生させる。

  4. ALTER TABLE PRIMARY KEY

    主キー、プライマリキー制約の追加
    ALTER TABLE table_name ADD
        [ CONSTRAINT primary_key_name ]
        PRIMARY KEY (col_name, colname2 ..) ;

  5. ADD PRIMARY KEY と USING INDEX
    ALTER TABLE table_name ADD CONSTRAINT primary_key_name 
      PRIMARY KEY  (col_name, colname2 ..) 
        USING INDEX -- インデックス作成時の属性情報
        PCTFREE 10 INITRANS 2 
        STORAGE( INITIAL 64K )
        TABLESPACE USERS ;

  6. 主キー、プライマリキー制約の削除
    ALTER TABLE table_name DROP PRIMARY KEY;
     or
    ALTER TABLE table_name DROP CONSTRAINT primary_key_name ;

  7. プライマリキーの確認をするための SQL
    select 
      c.table_name, c.constraint_name, c.status cc_status,
      cc.position, cc.column_name, 
      ix.index_name, ix.uniqueness, ix.tablespace_name, ix.visibility, ix.status
    from user_indexes ix,
      user_constraints c, user_cons_columns cc
    where
      ix.table_name in ('MY_TABLE') and c.constraint_type = 'P'
      and ix.index_name = c.index_name and c.constraint_name = cc.constraint_name
    order by cc.constraint_name, cc.position;


0 件のコメント:

コメントを投稿

ITIL4 Foundation Study Guide 2 : 4 Dimensions and 6 Factors

4  Dimensions:  Dimension1: Organizations & People Dimension2: Information & Technology Dimension3: Partners & Suppliers D...