- カテゴリ:
ALTER TABLE ... ALTER COLUMN¶
このトピックでは、 ALTER TABLE ステートメントで ALTER COLUMN
句を使用して、テーブルの1つ以上の列プロパティを変更する方法について説明します。
次のテーブルは、列のプロパティを変更するためのサポート対象/サポート対象外のアクションを示しています。
アクション |
サポート対象 |
サポート対象外 |
注意 |
---|---|---|---|
デフォルト値 |
|||
列のデフォルト(つまり
DROP DEFAULT )をドロップします。 |
✔ |
||
列のデフォルトシーケンスを変更します(つまり、
SET DEFAULT シーケンス名.NEXTVAL )。 |
✔ |
すでにシーケンスが含まれている列にのみ使用します。 |
|
デフォルトがシーケンスでない限り、列のデフォルトを変更します。
|
✔ |
||
列のデフォルトを追加します。
|
✔ |
||
NULL値の許容度 |
|||
列のNULL値の許容度を変更します(つまり、
SET NOT NULL または DROP NOT NULL )。 |
✔ |
||
データ型 |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
新しい精度が、現在列にある すべて の値を保持するのに十分な場合にのみ許可されます。さらに、精度を下げると、Time Travelに影響する可能性があります(詳細については、 使用上の注意 をご参照ください)。 |
||
✔ |
|||
コメント |
|||
列のコメントを追加または上書きします。
|
✔ |
||
マスキングポリシー |
|||
列の 列レベルのセキュリティ マスキングポリシーを設定または設定解除します。
|
✔ |
このトピックの内容:
構文¶
ALTER TABLE <name> { ALTER | MODIFY } [ ( ]
[ COLUMN ] <col1_name> DROP DEFAULT
, [ COLUMN ] <col1_name> SET DEFAULT <seq_name>.NEXTVAL
, [ COLUMN ] <col1_name> { [ SET ] NOT NULL | DROP NOT NULL }
, [ COLUMN ] <col1_name> [ [ SET DATA ] TYPE ] <type>
, [ COLUMN ] <col1_name> COMMENT '<string>'
, COLUMN <col1_name> SET MASKING POLICY <policy_name>
, COLUMN <col1_name> UNSET MASKING POLICY
[ , [ COLUMN ] <col2_name> ... ]
[ , ... ]
[ ) ]
使用上の注意¶
単一の ALTER TABLE ステートメントを使用して、テーブル内の複数の列を変更できます。各変更は、変更する列と列のプロパティで構成される句として指定され、コンマで区切られます。
ALTER
またはMODIFY
キーワードを使用して、ステートメントの句のリスト(変更する列/プロパティ)を開始します。括弧は句のグループ化に使用できますが、必須ではありません。
COLUMN
キーワードは各句で指定できますが、必須ではありません。句は任意の順序で指定できます。
列を
NOT NULL
に設定するときに、列に NULL 値が含まれる場合、エラーが返され、列に変更は適用されません。列のデフォルトの順序を変更するには、列にデフォルトの順序が存在している必要があります。まだシーケンスを持たない列にシーケンスを追加するために、コマンド
ALTER TABLE ... SET DEFAULT <シーケンス名>
を使用することはできません。列に
TYPE
を設定する場合、指定する型(つまりタイプ
)は NUMBER または テキストデータ型 (VARCHAR、STRING、TEXTなど)である必要があります。NUMBERデータ型の場合、
TYPE
を使用して次のことができます。指定した数値列の精度を上げる。
新しい精度が現在列にあるすべてのデータ値を保持するのに十分である場合は、指定された数値列の精度を下げる。
テキストデータ型の場合、
TYPE
は列の長さを 増やす ためにのみ使用できます。
列の精度がTime Travelに保持されている列データの最大精度を下回った場合、最初に精度を上げることなくテーブルを復元することはできません。
例¶
設定例:
CREATE OR REPLACE TABLE t1 ( c1 NUMBER NOT NULL, c2 NUMBER DEFAULT 3, c3 NUMBER DEFAULT seq1.nextval, c4 VARCHAR(20) DEFAULT 'abcde', c5 STRING); DESC TABLE t1; +------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------+ | name | type | kind | null? | default | primary key | unique key | check | expression | comment | |------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------| | C1 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | | C2 | NUMBER(38,0) | COLUMN | Y | 3 | N | N | NULL | NULL | NULL | | C3 | NUMBER(38,0) | COLUMN | Y | DB1.PUBLIC.SEQ1.NEXTVAL | N | N | NULL | NULL | NULL | | C4 | VARCHAR(20) | COLUMN | Y | 'abcde' | N | N | NULL | NULL | NULL | | C5 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | +------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------+
t1
に次の変更を加えます。
NOTNULL 列
c1
を NULL に変更します。列
c2
のデフォルトをドロップし、列c3
のデフォルトシーケンスを変更します。列
c4
の長さを増やし、列のデフォルトをドロップします。列
c5
にコメントを追加します。ALTER TABLE t1 ALTER COLUMN c1 DROP NOT NULL; ALTER TABLE t1 MODIFY c2 DROP DEFAULT, c3 SET DEFAULT seq5.nextval ; ALTER TABLE t1 ALTER c4 SET DATA TYPE VARCHAR(50), COLUMN c4 DROP DEFAULT; ALTER TABLE t1 ALTER c5 COMMENT '50 character column'; DESC TABLE t1; +------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------------------+ | name | type | kind | null? | default | primary key | unique key | check | expression | comment | |------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------------------| | C1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | | C2 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | | C3 | NUMBER(38,0) | COLUMN | Y | DB1.PUBLIC.SEQ5.NEXTVAL | N | N | NULL | NULL | NULL | | C4 | VARCHAR(50) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | | C5 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | 50 character column | +------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------------------+
前の例と同じですが、次の変更によりコマンドの汎用性/柔軟性を示しています。
単一の
ALTER COLUMN
句で実行されるすべてのアクション。句内の列の順序は異なります。
SET DATA TYPE
はTYPE
を単純化するために短縮されました。ALTER TABLE t1 ALTER ( c1 DROP NOT NULL, c5 COMMENT '50 character column', c4 TYPE VARCHAR(50), c2 DROP DEFAULT, COLUMN c4 DROP DEFAULT, COLUMN c3 SET DEFAULT seq5.nextval );この例では、同じ結果が生成されます。
列レベルのセキュリティマスキングポリシーをテーブル列に適用します。
-- single column ALTER TABLE empl_info MODIFY COLUMN empl_id SET MASKING POLICY mask_empl_id; -- multiple columns ALTER TABLE empl_info MODIFY COLUMN empl_id SET MASKING POLICY mask_empl_id , COLUMN empl_dob SET MASKING POLICY mask_empl_dob ;
テーブル列から列レベルのセキュリティマスキングポリシーを設定解除します。
-- single column ALTER TABLE empl_info modify column empl_id unset masking policy; -- multiple columns ALTER TABLE empl_info MODIFY COLUMN empl_id UNSET MASKING POLICY , COLUMN empl_dob UNSET MASKING POLICY ;