1. JCL para o SORT — SORTIN, SORTOUT e SYSIN
O DFSORT usa DDs com nomes diferentes dos outros utilitários. Os principais:
| DD Name | Papel |
|---|---|
SORTIN | Dataset de entrada a ser ordenado |
SORTOUT | Dataset de saída com os registros ordenados |
SYSIN | Instruções de controle do SORT |
SYSOUT | Mensagens e estatísticas (pode ser SYSOUT=*) |
SYSPRINT | Alternativa ao SYSOUT para mensagens |
SORTWK01..06 | Work datasets (gerados automaticamente se omitidos) |
💡 PGM=SORT ou PGM=DFSORT?
Nas instalações IBM, o programa se chama DFSORT, mas quase sempre há um alias chamado SORT. Se sua instalação usa SYNCSORT (um produto de terceiros), também responde por SORT. Na prática, PGM=SORT funciona em qualquer ambiente.
2. SORT FIELDS — ordenando registros
A instrução SORT FIELDS define as chaves de ordenação. Cada chave tem quatro parâmetros:
Exemplos práticos:
🦕 Analogia — SORT FIELDS como ORDER BY do SQL
SORT FIELDS=(6,3,CH,A, 1,30,CH,A) é o equivalente de ORDER BY filial ASC, nome ASC. Cada par de parâmetros a mais é como adicionar mais um campo no ORDER BY. A diferença é que no SORT você trabalha com posições de byte, não com nomes de coluna.
3. Tipos de dado — CH, ZD, PD, BI
| Tipo | Nome | Quando usar |
|---|---|---|
CH |
Character | Texto, alfanumérico, datas no formato AAAAMMDD (como string) |
ZD |
Zoned Decimal | Números em formato DISPLAY do COBOL (PIC 9), sem sinal ou com sinal trailing |
PD |
Packed Decimal | Números em formato COMP-3 do COBOL (PIC 9 COMP-3) |
BI |
Binary | Números binários — COMP/COMP-4 do COBOL (PIC 9 COMP) |
FI |
Fixed-point | Binário com sinal (COMP com valor negativo possível) |
FS |
Floating Signed | Números com sinal separado — PIC S9 com SIGN LEADING SEPARATE |
💡 CH para datas no formato AAAAMMDD
Datas no formato AAAAMMDD (ex.: 20261231) ordenam corretamente com tipo CH porque a ordem alfabética coincide com a ordem cronológica. Para datas em outros formatos (DDMMAAAA, MMDDAAAA), você precisaria de uma conversão antes de ordenar.
4. INCLUDE e OMIT — filtrando registros
Com INCLUDE você define quais registros devem aparecer na saída. Com OMIT você define quais devem ser descartados. Só um dos dois pode ser usado por vez.
Operadores de comparação disponíveis: EQ (igual), NE (diferente), GT (maior), GE (maior ou igual), LT (menor), LE (menor ou igual).
Para valores numéricos, use o número diretamente. Para valores literais de texto, use C'texto'. Para valores hexadecimais, use X'hex'.
5. OUTREC — reformatando a saída
O OUTREC FIELDS define como o registro de saída deve ser construído — quais campos incluir, em qual ordem e com quais literais adicionados:
💡 OUTREC muda o LRECL de saída
Se você usar OUTREC para construir um registro menor ou maior que o de entrada, o LRECL do SORTOUT precisa refletir o novo tamanho. O DFSORT informa o LRECL calculado no SYSOUT — confira se bate com o DCB do seu SORTOUT.
6. SORT FIELDS=COPY — copiar sem ordenar
Quando você quer apenas filtrar ou reformatar registros sem ordenar, use SORT FIELDS=COPY. Isso evita o overhead da ordenação e é muito mais rápido para arquivos grandes:
🦕 Analogia — SORT FIELDS=COPY como SELECT + WHERE sem ORDER BY
SORT FIELDS=COPY com INCLUDE e OUTREC é como um SELECT col1, col2 FROM tabela WHERE condição sem ORDER BY. Você filtra e projeta, mas não ordena. Use quando a ordenação não for necessária — o ganho de performance em arquivos grandes é significativo.