カテゴリ:

テーブル、ビュー、シーケンス DDL

ALTER TABLE ... ALTER COLUMN

このトピックでは、 ALTER TABLE ステートメントで ALTER COLUMN 句を使用して、テーブルの1つ以上の列プロパティを変更する方法について説明します。

次のテーブルは、列のプロパティを変更するためのサポート対象/サポート対象外のアクションを示しています。

アクション

サポート対象

サポート対象外

注意

デフォルト値

列のデフォルト(つまり DROP DEFAULT )をドロップします。

列のデフォルトシーケンスを変更します(つまり、 SET DEFAULT シーケンス名.NEXTVAL)。

すでにシーケンスが含まれている列にのみ使用します。

デフォルトがシーケンスでない限り、列のデフォルトを変更します。

列のデフォルトを追加します。

NULL値の許容度

列のNULL値の許容度を変更します(つまり、 SET NOT NULL または DROP NOT NULL)。

データ型

列の データ型 を同義の型に変更します(例: STRING から VARCHAR)。

列の データ型 を同義の型に変更します(例: STRING から NUMBER)。

テキスト/文字列の列 の長さを増やします(例: VARCHAR(50) から VARCHAR(100))。

テキスト/文字列の列 の長さを短くします(例: VARCHAR(50) から VARCHAR(25))。

数値列 の精度を上げます(例: NUMBER(10,2) から NUMBER(20,2))。

数値列 の精度を下げます(例: NUMBER(20,2) から NUMBER(10,2))。

新しい精度が、現在列にある すべて の値を保持するのに十分な場合にのみ許可されます。さらに、精度を下げると、Time Travelに影響する可能性があります(詳細については、 使用上の注意 をご参照ください)。

数値列 のスケールを変更します(例: NUMBER(10,2) から NUMBER(10,4))。

コメント

列のコメントを追加または上書きします。

マスキングポリシー

列の 列レベルのセキュリティ マスキングポリシーを設定または設定解除します。

ALTER ステートメントごとに1列のみです。列に対して単一の ALTER ステートメントを実行して、列レベルのセキュリティマスキングポリシーを設定または設定解除します。

このトピックの内容:

構文

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 ] <col2_name> ... ]
                                          [ , ... ]
                                      [ ) ]

使用上の注意

  • 単一の ALTER TABLE ステートメントを使用して、テーブル内の複数の列を変更できます。各変更は、変更する列と列のプロパティで構成される句として指定され、コンマで区切られます。

    • ALTER または MODIFY キーワードを使用して、ステートメントの句のリスト(変更する列/プロパティ)を開始します。

    • 括弧は句のグループ化に使用できますが、必須ではありません。

    • COLUMN キーワードは各句で指定できますが、必須ではありません。

    • 句は任意の順序で指定できます。

  • 列を NOT NULL に設定するときに、列に NULL 値が含まれる場合、エラーが返され、列に変更は適用されません。

  • 列のデフォルトの順序を変更するには、列にデフォルトの順序が存在している必要があります。まだシーケンスを持たない列にシーケンスを追加するために、コマンド ALTER TABLE ... SET DEFAULT <シーケンス名> を使用することはできません。

  • 列に TYPE を設定する場合、指定する型(つまり タイプ)は NUMBER または テキストデータ型 (VARCHAR、STRING、TEXTなど)である必要があります。

    • NUMBER データ型の場合、 TYPE を使用して次のことができます。

      • 指定したテキスト列の精度を上げる。

      • 新しい精度が現在列にあるすべてのデータ値を保持するのに十分である場合は、指定されたテキスト列の精度を下げる。

    • テキストデータ型の場合、 TYPE は列の長さを 増やす ためにのみ使用できます。

  • 列の精度がTime Travelに保持されている列データの最大精度を下回った場合、最初に精度を上げることなくテーブルを復元することはできません。

  • ALTER ステートメントごとに1列のみです。列に対して単一の ALTER ステートメントを実行して、列レベルのセキュリティマスキングポリシーを設定または設定解除します。

設定例:

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 TYPETYPE を単純化するために短縮されました。

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
  );

この例では、同じ結果が生成されます。

列レベルのセキュリティマスキングポリシーをテーブル列に適用します。

ALTER TABLE empl_info MODIFY COLUMN empl_id SET MASKING POLICY mask_empl_id;

テーブル列から列レベルのセキュリティマスキングポリシーを設定解除します。

ALTER TABLE empl_info modify column empl_id unset masking policy;