✅ Explicação
A instrução INSERT
serve para inserir novas linhas em uma tabela ou visão (view). Dependendo do tipo de definição da view, a inserção pode ser feita diretamente nela ou redirecionada para a tabela base.
📌 Usos mais comuns
-
Inserir dados diretamente (valores fixos ou variáveis)
-
Inserir dados de outra tabela (via
SELECT
) -
Inserir múltiplas linhas com array de estrutura
-
Inserir usando valores padrão
🧾 Sintaxe
🔹 Inserção direta com valores:
INSERT INTO tabela (coluna1, coluna2, ...)
VALUES (valor1, valor2, ...);
🔹 Inserção a partir de uma seleção:
INSERT INTO tabela (coluna1, coluna2, ...)
SELECT coluna1, coluna2, ...
FROM outra_tabela
WHERE condição;
🔹 Inserção com valores padrão:
INSERT INTO tabela
VALUES DEFAULT;
🔹 Inserção de múltiplas linhas com array de host (em programas):
EXEC SQL
INSERT INTO tabela (coluna1, coluna2, ...)
VALUES (:host-array)
END-EXEC.
🧪 Exemplos práticos
Exemplo 1: Inserindo um único registro fixo
EXEC SQL
INSERT INTO EMPREGADOS (ID, NOME, CARGO, SALARIO)
VALUES (1001, 'JOÃO SILVA', 'ANALISTA', 5000)
END-EXEC.
Exemplo 2: Inserção com variáveis COBOL
01 WS-ID PIC 9(4) VALUE 1002.
01 WS-NOME PIC X(30) VALUE 'MARIA OLIVEIRA'.
01 WS-CARGO PIC X(20) VALUE 'PROGRAMADOR'.
01 WS-SALARIO PIC 9(7)V99 VALUE 6500.00.
EXEC SQL
INSERT INTO EMPREGADOS (ID, NOME, CARGO, SALARIO)
VALUES (:WS-ID, :WS-NOME, :WS-CARGO, :WS-SALARIO)
END-EXEC.
Exemplo 3: Inserindo com loop e interação
PERFORM UNTIL WS-EOF = 'S'
ACCEPT WS-ID
ACCEPT WS-NOME
ACCEPT WS-CARGO
ACCEPT WS-SALARIO
EXEC SQL
INSERT INTO EMPREGADOS (ID, NOME, CARGO, SALARIO)
VALUES (:WS-ID, :WS-NOME, :WS-CARGO, :WS-SALARIO)
END-EXEC
ACCEPT WS-EOF
END-PERFORM.
Exemplo 4: Inserção com SELECT
EXEC SQL
INSERT INTO EMPREGADOS_ARQUIVO (ID, NOME, CARGO, SALARIO)
SELECT ID, NOME, CARGO, SALARIO
FROM EMPREGADOS
WHERE CARGO = 'ANALISTA'
END-EXEC.
⚠️ Regras importantes
-
O número de colunas deve bater com o número de valores.
-
Se a tabela tiver colunas definidas como
GENERATED ALWAYS
, deve-se usarOVERRIDING SYSTEM VALUE
ouDEFAULT
. -
Para colunas
NOT NULL
, não useDEFAULT
a menos que tenha sido explicitamente definido. -
NULL
só pode ser usado em colunas que aceitam valor nulo.
💡 Dicas
-
Prefira a sintaxe explícita com nomes de colunas — evita erro e facilita manutenção.
-
Use
INSERT ... SELECT
para migração ou replicação de dados. -
Para
views
, verifique se é possível inserir — nem toda view permite isso diretamente. -
Em programas COBOL, evite
INSERT
dentro de loops muito grandes semCOMMIT
intermediário.
✅ Conclusão
O comando INSERT
é um dos pilares do SQL. Saber usá-lo corretamente evita dores de cabeça com dados errados ou restrições violadas. Seja com valores fixos, variáveis ou resultados de consultas, esse comando é essencial no dia a dia com DB2.