1. SUM FIELDS — agregação e deduplicação
O SUM FIELDS opera sobre registros com a mesma chave de ordenação. Ele soma os campos numéricos indicados e mantém apenas um registro por chave — o que equivale a um GROUP BY + SUM do SQL.
Com esse JCL, se houver dois registros com a mesma chave (posição 1-5), o SORT mantém um único registro com a soma dos valores na posição 11-17.
SUM FIELDS=NONE elimina os registros com chave duplicada, mantendo apenas o primeiro de cada grupo — sem somar nada. É o equivalente de um SELECT DISTINCT por chave.
⚠️ SUM exige SORT — não funciona com FIELDS=COPY
O SUM só faz sentido quando os registros foram ordenados pela chave — o SORT precisa agrupar registros adjacentes com a mesma chave para somá-los. Por isso, SUM não pode ser usado com SORT FIELDS=COPY.
2. INREC — reformatando antes de ordenar
O INREC reformata cada registro de entrada antes que ele seja ordenado. É útil quando você precisa reorganizar campos para que a chave de ordenação fique na posição certa, ou para calcular um campo derivado que será usado como chave.
🦕 Analogia — INREC/OUTREC como rascunho e versão final
Pense no INREC como uma etapa de preparação: você reorganiza o registro internamente para facilitar a ordenação. O OUTREC é a etapa final: você define como o registro vai para o SORTOUT. O registro que passa pelo SORT internamente pode ser diferente do que entra e do que sai.
3. OUTFIL — múltiplos arquivos de saída
Com OUTFIL, um único passo de SORT pode gerar vários arquivos de saída diferentes — cada um com seu próprio filtro e formato. Isso elimina múltiplos steps de SORT quando você precisa segmentar um arquivo.
Cada OUTFIL referencia um DD pelo nome em FNAMES= e pode ter seu próprio INCLUDE, OMIT e OUTREC. O SORTOUT não é usado quando se usa OUTFIL — os DDs do OUTFIL substituem o SORTOUT.
4. JOINKEYS — juntando dois arquivos
O JOINKEYS faz o equivalente de um JOIN SQL entre dois arquivos, usando um campo-chave comum. É um dos recursos mais poderosos do DFSORT para processos de ETL.
O REFORMAT FIELDS define como montar o registro de saída, referenciando campos de F1 e F2 com a notação F1:posição,comprimento e F2:posição,comprimento.
Tipos de JOIN
| Instrução JOIN | Equivalente SQL | O que inclui na saída |
|---|---|---|
JOIN UNPAIRED,F1 | LEFT JOIN | Todos de F1, com ou sem par em F2 |
JOIN UNPAIRED,F2 | RIGHT JOIN | Todos de F2, com ou sem par em F1 |
JOIN UNPAIRED,F1,F2 | FULL OUTER JOIN | Todos de F1 e F2 |
| (sem UNPAIRED) | INNER JOIN | Apenas registros com par nos dois arquivos |
5. Exemplo real — relatório de vendas por filial
Juntando o que aprendemos: um SORT que filtra transações do mês corrente, soma o valor por filial e gera dois arquivos — um com filiais acima da meta e outro abaixo.
✅ OUTFIL opera após o SUM e OUTREC
A sequência de processamento interna do SORT é: INREC → INCLUDE/OMIT → SORT → SUM → OUTREC → OUTFIL. Isso significa que o OUTFIL vê o registro já transformado pelo OUTREC. No exemplo acima, o OUTFIL usa posição 5 porque no registro reformatado pelo OUTREC o valor já está na posição 5 (após os 4 bytes do código de filial).