🧠 Explicação

O comando ALTER é utilizado para modificar a estrutura de tabelas já existentes no DB2. Com ele, você pode adicionar, modificar ou excluir colunas, criar ou remover restrições (como PRIMARY KEY), e até renomear objetos em versões mais modernas.

🔧 Usos mais comuns

  • Adicionar colunas a uma tabela existente (ADD).

  • Remover colunas (em alguns SGBDs — o DB2 z/OS não permite DROP COLUMN diretamente).

  • Adicionar ou remover restrições (PRIMARY KEY, UNIQUE, FOREIGN KEY).

  • Modificar o tipo de dado de uma coluna (com limitações).

  • Criar ou excluir índices, mas fora do ALTER TABLE.

🧾 Sintaxe básica

ALTER TABLE nome_tabela
  ADD nome_coluna TIPO [NOT NULL];

Exemplo:

ALTER TABLE DEPT
  ADD DEPSALA DECIMAL(10,2);

📌 Limitações importantes

  • Em versões tradicionais do DB2 (mainframe), não é possível remover colunas com DROP diretamente.

  • Para excluir uma coluna, é necessário:

    1. Criar uma nova tabela com os campos desejados;

    2. Copiar os dados da antiga;

    3. Excluir a tabela antiga (DROP TABLE);

    4. Renomear a nova tabela (opcional).

💡 Dicas

  • Sempre faça backup antes de alterar uma tabela com dados importantes.

  • Antes de tentar excluir uma PRIMARY KEY, verifique se não existe FOREIGN KEY referenciando ela.

  • Use arquivos .SQL separados para registrar alterações no banco — isso ajuda a manter a rastreabilidade.

  • Em ambientes de produção, qualquer ALTER TABLE deve passar por validação rigorosa.

🧱 Exemplo prático: adicionando campo de salário no DEPT

ALTER TABLE DEPT
  ADD DEPSALA DECIMAL(10,2);

🚫 Tentativa de remoção de coluna (não permitido):

ALTER TABLE DEPT
  DROP DEPSALA;
-- Isso gera erro em versões tradicionais do DB2.

Alternativa sugerida:

-- 1. Criar nova tabela sem o campo indesejado
CREATE TABLE DEPT2 (
  DepNume INTEGER NOT NULL,
  DepNome CHAR(20) NOT NULL,
  DepLoca CHAR(20) NOT NULL,
  PRIMARY KEY (DepNume)
);

-- 2. Copiar dados
INSERT INTO DEPT2 (DepNume, DepNome, DepLoca)
SELECT DepNume, DepNome, DepLoca FROM DEPT;

-- 3. Remover tabela antiga e renomear a nova
DROP TABLE DEPT;
RENAME TABLE DEPT2 TO DEPT;

 

Conclusão

O comando ALTER é essencial para evoluir a estrutura de tabelas no DB2 sem perder dados. No entanto, em ambientes mainframe, as restrições de alteração são mais rígidas, exigindo soluções alternativas como recriação de tabelas. Com planejamento, é possível manter a integridade e continuar expandindo sua base de dados com segurança.