Existe um nível 78 na DATA DIVISION?
O nível 78 é usado na DATA DIVISION para definir constantes, ou seja, itens elementares que não podem ser alterados durante a execução do programa.
Existe apenas em alguns compiladores, como no Micro Focus COBOL e no GnuCOBOL, mas até onde sei não foi implementado em nenhum compilador da plataforma mainframe e não faz parte de nenhuma especificação ANSI/ISO.
Exemplo
No trecho abaixo, vemos uma constante definida com nível 78 que é usada tanto na definição de um array na WORKING-STORAGE quanto num comando da PROCEDURE DIVISION:
identification division. program-id. gtc008. data division. working-storage section. 77 indice pic 9(002) value zeros. 01 tabela-interna. 78 OCORRENCIAS value 30. 03 tabela. 05 variavel pic 9(002) occurs OCORRENCIAS. procedure division. inicio.perform varying indice from 1 by 1 until indice > OCORRENCIAS
move indice to variavel(indice)
end-perform
stop run.
Vantagens
Permite a criação de itens elementares que podem ser usados em diversos pontos do programa, eventualmente facilitando manutenções futuras. Por exemplo, se no programa anterior tivéssemos que expandir a tabela interna para 100 ocorrências, bastaria modificar o valor da constante OCORRENCIAS.
O mesmo efeito, claro, poderia ser obtido com uma variável (de nível 77 ou qualquer outro nível) que tivesse essa mesma função. Mas o uso explícito do nível 78 deixa claro para o programador que ele pode modificar o valor inicial do item sem afetar nenhuma outra funcionalidade do programa.
Desvantagens
Por não estar disponível em todos os compiladores e não fazer parte do padrão ANSI/ISO, o uso do nível 78 pode exigir mais trabalho numa futura migração de plataforma e/ou compilador.
Restrições
Só pode ser usado na WORKING-STORAGE SECTION.