✅ 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 usar OVERRIDING SYSTEM VALUE ou DEFAULT.

  • Para colunas NOT NULL, não use DEFAULT 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 sem COMMIT 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.