ALTER TABLE ... ALTER COLUMN¶
このトピックでは、 ALTER TABLE ステートメントで ALTER COLUMN 句を使用して、テーブルの1つ以上の列プロパティを変更する方法について説明します。
次のテーブルは、列のプロパティを変更するためのサポート対象/サポート対象外のアクションを示しています。
| アクション | サポート対象 | サポート対象外 | 注意 | 
|---|---|---|---|
| デフォルト値 | |||
| 列のデフォルト(つまり  DROP DEFAULT)をドロップします。 | ✔ | 列とデフォルトが ALTER TABLE コマンドで定義されているときは許可されません。詳細については、以下の 使用上の注意 をご参照ください。 | |
| 列のデフォルトシーケンスを変更します(つまり、  SET DEFAULT seq_name.NEXTVAL)。 | ✔ | すでにシーケンスが含まれている列にのみ使用します。 | |
| デフォルトがシーケンスでない限り、列のデフォルトを変更します。 | ✔ | ||
| 列のデフォルトを追加します。 | ✔ | ||
| NULL値の許容度 | |||
| 列のNULL値の許容度を変更します(つまり、  SET NOT NULLまたはDROP NOT NULL)。 | ✔ | ||
| データ型 | |||
| ✔ | |||
| ✔ | |||
| ✔ | |||
| ✔ | |||
| ✔ | |||
| ✔ | |||
| ✔ | |||
| ✔ | 新しい精度が、現在列にある すべて の値を保持するのに十分な場合にのみ許可されます。さらに、精度を下げると、Time Travelに影響する可能性があります(詳細については、 使用上の注意 をご参照ください)。 | ||
| ✔ | |||
| コメント | |||
| 列のコメントを設定または設定解除します。 | ✔ | ||
| マスキングポリシー | |||
| 列の マスキングポリシー を設定または設定解除します。 | ✔ | ||
| 投影ポリシー | |||
| 列の 投影ポリシー を設定または設定解除します。 | ✔ | ||
| オブジェクトのタグ付け | |||
| 列の タグ の設定または設定解除。 | ✔ | 列は最大20タグをサポートでき、タグ文字列値の最大文字数は256です。 | 
- こちらもご参照ください。
- ALTER TABLE、 CREATE TABLE、 DROP TABLE、 SHOW TABLES、 DESCRIBE TABLE 
構文¶
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> UNSET COMMENT
                                          [ , [ COLUMN ] <col2_name> ... ]
                                          [ , ... ]
                                      [ ) ]
ALTER TABLE <name> { ALTER | MODIFY } [ COLUMN ] dataGovnPolicyTagAction
使用上の注意¶
- 単一の ALTER TABLE ステートメントを使用して、テーブル内の複数の列を変更できます。各変更は、変更する列と列のプロパティで構成される句として指定され、コンマで区切られます。 - ALTERまたは- MODIFYキーワードを使用して、ステートメントの句のリスト(変更する列/プロパティ)を開始します。
- 括弧は句のグループ化に使用できますが、必須ではありません。 
- COLUMNキーワードは各句で指定できますが、必須ではありません。
- 句は任意の順序で指定できます。 
 
- 列を - NOT NULLに設定するときに、列に NULL 値が含まれる場合、エラーが返され、列に変更は適用されません。
- 半構造化データ型(ARRAY、 OBJECT、 VARIANT)を使用する列は、テーブルが空の場合を除き、 - NOT NULLに設定することはできません。テーブルに行が含まれているときにこれらの列を- NOT NULLに設定することはサポートされておらず、エラーになります。
- 列のデフォルトの順序を変更するには、列にデフォルトの順序が存在している必要があります。まだシーケンスを持たない列にシーケンスを追加するために、コマンド - ALTER TABLE ... SET DEFAULT <シーケンス名>を使用することはできません。
- DEFAULT値の列を追加するようにテーブルを変更した場合は、その列のデフォルト値をドロップすることはできません。たとえば、次の一連のステートメントでは、最後の- ALTER TABLE ... ALTER COLUMNステートメントによってエラーが発生します。- CREATE TABLE t(x INT); INSERT INTO t VALUES (1), (2), (3); ALTER TABLE t ADD COLUMN y INT DEFAULT 100; INSERT INTO t(x) VALUES (4), (5), (6); ALTER TABLE t ALTER COLUMN y DROP DEFAULT; - この制限により、列が追加される前に挿入された行と、列が追加された後に挿入された行の値の不一致が防止されます。デフォルトが削除された場合、列には次が含まれます。 - 列が追加される前に挿入された行のNULL 値。 
- 列が追加された後に挿入された行のデフォルト値。 
 - テーブルのクローンからデフォルトの列値を削除することも禁止されています。 
- 列に - TYPEを設定する場合、指定する型(つまり- type)は NUMBER または テキストデータ型 (VARCHAR、 STRING、 TEXT など)である必要があります。- NUMBER データ型の場合は、 - TYPEを使用して次を実行できます。- 指定した数値列の精度を上げる。 
- 新しい精度が現在列にあるすべてのデータ値を保持するのに十分である場合は、指定された数値列の精度を下げる。 
 
- テキストデータ型の場合、 - TYPEは列の長さを 増やす ためにのみ使用できます。
 
- 列の精度がTime Travelに保持されている列データの最大精度を下回った場合は、最初に精度を上げることなくテーブルを復元することはできません。 
- マスキングポリシーの場合、 - USING句と- FORCEキーワードはどちらもオプションです。どちらも、列にマスキングポリシーを設定する必要はありません。- USING句と- FORCEキーワードは、個別にまたは一緒に使用できます。詳細については、以下をご参照ください。
- テーブルの列構造がポリシーで指定された列と一致する場合は、条件付き列を使用する単一のマスキングポリシーを複数のテーブルに適用できます。 
- マスキングポリシーを使用して1つ以上のテーブル列を変更する場合、または行アクセスポリシーを使用してテーブル自体を変更する場合は、 POLICY_CONTEXT 関数を使用して、マスキングポリシーによって保護されている列と、行アクセスポリシーによって保護されているテーブルに対するクエリをシミュレートします。 
 
- メタデータ(たとえば、 - COMMENTフィールド)に関して、- 注意 - Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。 
例¶
設定例:
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 ;