quinta-feira, agosto 27, 2026

Limite de 32 Bytes no Nome das Variáveis no NaturaL/Adabas

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.

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         
     -- - -------------------------------- -- - -------- ----- - - -- -         


0 Comments:

Enviar um comentário