ALTER TABLE … ALTER COLUMN¶
Este tópico descreve como modificar uma ou mais propriedades de coluna para uma tabela usando uma cláusula ALTER COLUMN em uma instrução ALTER TABLE.
A tabela a seguir descreve as ações suportadas/não suportadas para modificar as propriedades das colunas:
| Ação | Com suporte | Sem suporte | Notas | 
|---|---|---|---|
| Valores padrão | |||
| Descartar o padrão para uma coluna (isto é,  DROP DEFAULT). | ✔ | Não permitido se a coluna e o padrão fossem definidos por um comando ALTER TABLE. Para obter mais detalhes, consulte as Notas de uso abaixo. | |
| Alterar a sequência padrão de uma coluna (isto é,  SET DEFAULT seq_name.NEXTVAL). | ✔ | Usar somente para colunas que já tenham uma sequência. | |
| Alterar o padrão para uma coluna, a menos que o padrão seja uma sequência. | ✔ | ||
| Adicionar um padrão para uma coluna. | ✔ | ||
| Nulidade | |||
| Alterar a nulidade de uma coluna (isto é,  SET NOT NULLouDROP NOT NULL). | ✔ | ||
| Tipos de dados | |||
| ✔ | |||
| ✔ | |||
| Aumente o comprimento de uma coluna da cadeia de caracteres de texto (por exemplo,  VARCHAR(50)paraVARCHAR(100)). | ✔ | ||
| Diminua o comprimento de uma coluna da cadeia de caracteres de texto (por exemplo,  VARCHAR(50)paraVARCHAR(25)). | ✔ | ||
| Aumente o comprimento de uma coluna da cadeia de caracteres binária (por exemplo,  BINARY(50)paraBINARY(100)). | ✔ | ||
| Diminua o comprimento de uma coluna da cadeia de caracteres binária (por exemplo,  BINARY(50)paraBINARY(25)). | ✔ | ||
| ✔ | |||
| ✔ | Somente permitido se a nova precisão for suficiente para manter todos os valores atualmente na coluna. Além disso, a diminuição da precisão pode afetar o Time Travel (consulte Notas de uso para obter detalhes). | ||
| ✔ | |||
| Comentários | |||
| Defina ou remova o comentário para uma coluna. | ✔ | ||
| Política de mascaramento | |||
| Definir ou remover uma política de mascaramento em uma coluna. | ✔ | ||
| Política de projeção | |||
| Defina ou remova uma política de projeção em uma coluna. | ✔ | ||
| Marcação de objetos | |||
| Definir ou remover uma tag em uma coluna. | ✔ | Uma coluna pode suportar até 20 tags, e o número máximo de caracteres para um valor de cadeia de caracteres de tags é 256. | 
- Consulte também:
- ALTER TABLE , CREATE TABLE , DROP TABLE , SHOW TABLES , DESCRIBE TABLE 
Sintaxe¶
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
Notas de uso¶
- Uma única instrução ALTER TABLE pode ser usada para modificar várias colunas em uma tabela. Cada mudança é especificada como uma cláusula que consiste na coluna e na propriedade da coluna a ser modificada, separada por vírgulas: - Use a palavra-chave - ALTERou- MODIFYpara iniciar a lista de cláusulas (ou seja, colunas/propriedades a modificar) na instrução.
- Parênteses podem ser usados para agrupar as cláusulas, mas não são necessários. 
- A palavra-chave - COLUMNpode ser especificada em cada cláusula, mas não é necessária.
- As cláusulas podem ser especificadas em qualquer ordem. 
 
- Ao definir uma coluna para - NOT NULL, se a coluna contiver valores NULL, um erro é retornado e nenhuma alteração é aplicada à coluna.
- Colunas que usam tipos de dados semiestruturados (ARRAY, OBJECT e VARIANT) não podem ser definidas como - NOT NULL, exceto quando a tabela está vazia. Definir essas colunas como- NOT NULLquando a tabela contém linhas não é compatível e resulta em erro.
- Para alterar a sequência padrão de uma coluna, a coluna já deve ter uma sequência padrão. Você não pode usar o comando - ALTER TABLE ... SET DEFAULT <seq_name>para adicionar uma sequência a uma coluna que ainda não tenha uma sequência.
- Se você alterar uma tabela para adicionar uma coluna com um valor - DEFAULT, então você não pode descartar o valor padrão para aquela coluna. Por exemplo, na sequência de instruções a seguir, a última instrução- ALTER TABLE ... ALTER COLUMNcausa um erro:- 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; - Esta restrição evita a inconsistência entre os valores nas linhas inseridas antes da adição da coluna e as linhas inseridas após a adição da coluna. Se o padrão fosse descartado, então a coluna conteria: - Um valor NULL para as linhas inseridas antes da adição da coluna. 
- O valor padrão das linhas inseridas depois que a coluna era adicionada. 
 - Também é proibido remover o valor padrão da coluna de qualquer clone da tabela. 
- Ao definir o - TYPEpara uma coluna, o tipo especificado (isto é,- type) deve ser NUMBER ou um tipo de dados de texto (VARCHAR, STRING, TEXT etc.).- Para o tipo de dados NUMBER, - TYPEpode ser usado para:- Aumentar a precisão da coluna de números especificada. 
- Diminuir a precisão da coluna de números especificada se a nova precisão for suficiente para manter todos os valores de dados atualmente na coluna. 
 
- Para tipos de dados de texto, - TYPEsó pode ser usado para aumentar o comprimento da coluna.
 
- Se a precisão de uma coluna for diminuída e ficar abaixo da precisão máxima de qualquer dado de coluna retido no Time Travel, não será possível restaurar a tabela sem antes aumentar a precisão. 
- Para políticas de mascaramento: - A cláusula - USINGe a palavra-chave- FORCEsão ambas opcionais; nenhuma delas é necessária para definir uma política de mascaramento em uma coluna. A cláusula- USINGe a palavra-chave- FORCEpodem ser usadas separadamente ou em conjunto. Para obter mais detalhes, consulte:
- Uma única política de mascaramento que utilize colunas condicionais pode ser aplicada a várias tabelas, desde que a estrutura de colunas da tabela corresponda às colunas especificadas na política. 
- Ao modificar uma ou mais colunas da tabela com uma política de mascaramento ou a própria tabela com uma política de acesso a linhas, use a função POLICY_CONTEXT para simular uma consulta na(s) coluna(s) protegida(s) por uma política de mascaramento e na tabela protegida por uma política de acesso a linhas. 
 
- Em relação aos metadados (por exemplo, o campo - COMMENT):- Atenção - Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake. 
Exemplos¶
Exemplo de configuração:
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 | +------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------+
Fazer as seguintes mudanças em t1:
Alterar a coluna NOT NULL
c1para NULL.
Abandonar o padrão da coluna
c2e alterar a sequência padrão da colunac3.
Aumentar o comprimento da coluna
c4e descartar o padrão para a coluna.
Adicionar um comentário para a coluna
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 | +------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------------------+
O mesmo do exemplo anterior, mas com as seguintes mudanças para ilustrar a versatilidade/flexibilidade do comando:
Todas as ações executadas em uma única cláusula
ALTER COLUMN.
A ordem das colunas dentro da cláusula é diferente.
SET DATA TYPEabreviado paraTYPE.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 );Este exemplo produz os mesmos resultados.
Aplique uma política de mascaramento de segurança em nível de coluna a uma coluna de tabela:
-- 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 ;
Remover uma política de mascaramento de segurança em nível de coluna de uma coluna da tabela:
-- 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 ;