Durante a manutenção ou desenvolvimento de rotinas na linguagem Natural, é comum nos depararmos com comportamentos inesperados do compilador que deixam dúvidas. Recentemente, um desenvolvedor passou por uma situação em que utilizava uma variável não declarada explicitamente no código, mas, para a surpresa de todos, o sistema não retornou nenhum erro de compilação ou execução. Investigando o caso e simulando a rotina com o apoio do suporte Adabas, nos mostraram a causa raiz desse comportamento: a limitação interna de 32 bytes/caracteres para a tabela de símbolos do compilador Natural. A seguir, detalho esse teste prático, a explicando como esse mesmo limite se reflete em outras estruturas do ecossistema, como Views e Campos no Predict/Adabas.
-- essa variavel sem o YY não esta definida, mas não dá erro
-- explicação: depois de 32 caracteres no nome da variável, o Natural desconsidera.
Ao rodar, so mostra o nome da variavel -01-01 não mostra o restante
Essa é a tela para criar um campo (Field ID) - tem um limite de 32
Leia Mais
DEFINE DATA LOCAL 1 #DATA-INI-WEB-INFRACOES-XXXXXXXX-YY (N8) * 1...x....1....x....2....x....3.. --- até aqui dá 32 bytes. o YY excede 32. END-DEFINE MOVE 100 TO #DATA-INI-WEB-INFRACOES-XXXXXXXX-YY MOVE 200 TO #DATA-INI-WEB-INFRACOES-XXXXXXXX WRITE #DATA-INI-WEB-INFRACOES-XXXXXXXX WRITE #DATA-INI-WEB-INFRACOES-XXXXXXXX-YY END
-- essa variavel sem o YY não esta definida, mas não dá erro
-- explicação: depois de 32 caracteres no nome da variável, o Natural desconsidera.
Simulando
Simulando esas situação> > + Program CSAVAR Lib SUPORTE2 All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 RESET #TRANSACAO-VARIAVEL-ORIGEM-01-01012024(A10) 0020 MOVE 'A' TO #TRANSACAO-VARIAVEL-ORIGEM-01-01012024 0030 WRITE '=' #TRANSACAO-VARIAVEL-ORIGEM-01-01012024 0040 END
Ao rodar, so mostra o nome da variavel -01-01 não mostra o restante
MORE
PAG 1 17/01/24 08:49:04
#TRANSACAO-VARIAVEL-ORIGEM-01-01: A
Importante
O compilador/interpretador do Natural mantém uma tabela interna de nome variáveis para resolver a questão de endereçamento de memória. Essa tabela tem somente 32 bytes para o símbolo, por isso a limitação do tamanho do nome. Quando o nome da variável tem mais de 32 bytes, não aparece o erro de compilação e será levado em conta somente os 32 primeiros caracteres. Deve-se tomar cuidado com o nome de variáveis que possuem mais de 32 caracteres, cujos primeiros 32 bytes sejam iguais, porque nesse caso o compilador não terá como controlar corretamente o endereçamento.Limite
Se há uma restrição estabelecida pelo compilador/interpretador Natural para variáveis, é plausível concluir que também exista um limite para os "nomes de views" e "campos" no Adabas. Essa suposição ganha respaldo ao observar as telas onde temos que criar uma view e os campos identificados no Predict, especialmente em relação aos limites estabelecidos para o nome de uma view. Essa correlação sugere a presença de limitações consistentes ao longo do ambiente, destacando a importância de considerar esses parâmetros ao trabalhar com variáveis, views e campos no sistema.Telas Predict
Essa é a tela para criar uma view - tem um limite de 32
07:21:47 ***** P R E D I C T 4.4.1 ***** 2024-01-18
Plan 0 - (FI) File Maintenance - Profile DBAP055
Function Function
A Add a file L Link children
C Copy file S Select file from a list
M Modify file B Push backward
N Rename/Renumber file F Force standard
P Purge file J Physical Attributes
D Display file K Modify Vista elements
Function .........
File ID .......... |||||||||x|||||||||x|||||||||x|| Attributes ........*
Copy ID .......... |||||||||x|||||||||x|||||||||x|| File of type ......*
Contained in DA .. File nr ............ 426
External name ....
Restrictions ....* Profile DBAP055 ,empty Association .......* EL
Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
Help menu Stop Last E-el Flip Print Impl Supo2 Ssec Prof next
Essa é a tela para criar um campo (Field ID) - tem um limite de 32
> > + Fi: AEAD-FISICO-426 L: 1 S: 29
Ty L Field ID F Cs Length Occ D U DB S Top
*- - -------------------------------- *- * -------- ----- * * -- *
1 AEC-PLACA-PGE A 7,0 D AA N
1 AEC-RENAVAM-PGE N 11,0 D AB N
1 AEC-MUNICIPIO-PGE N 4,0 D AC N
MU 1 AEC-EXERCICIO-PGE N 4,0 AD N
1 AEC-DATA-NOT-GUIA-PGE N 8,0 AE N
1 AEC-DATA-VENC-NOT-GUIA-PGE N 8,0 D AF N
1 AEC-DATA-NOT-DO-PGE N 8,0 AG N
1 AEC-DATA-VENC-NOT-DO-PGE N 8,0 D AH N
1 AEC-DT-BLOQUEIO-PGE N 8,0 D AI N
1 AEC-HR-BLOQUEIO-PGE N 9,0 AJ N
1 AEC-SITUACAO-PGE N 1,0 AK N
1 AEC-DATA-GRAVA-VIEW-PGE N 8,0 D AL N
1 AEC-NOME-DEV-PGE A 50,0 AM N
1 AEC-LOGRADOURO-DEV-PGE A 28,0 AN N
1 AEC-NUMERO-DEV-PGE A 7,0 AO N
1 AEC-COMPLEMENTO-PGE A 10,0 AP N
1 AEC-BAIRRO-DEV-PGE A 15,0 AQ N
1 AEC-CEP-DEV-PGE N 8,0 AR N
1 AEC-MUNICIPIO-DEV-PGE N 4,0 AS N
-- - -------------------------------- -- - -------- ----- - - -- -





