🧠 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:
-
Criar uma nova tabela com os campos desejados;
-
Copiar os dados da antiga;
-
Excluir a tabela antiga (
DROP TABLE
); -
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 existeFOREIGN 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.