Declarar un registro que redefine otro

Puede declarar un registro que redefine un área de memoria declarada por otro registro. Por ejemplo, puede escribir un bucle que lee un área de datos después de otra de un archivo serie cuando la estructura de los datos recibidos es distinta de una recuperación a la siguiente, como en el ejemplo siguiente:
Record RecordA type SerialRecord
   { fileName = "myFile" }
   record_type char(1);
   item1 char(20); 
end 

Record RecordB type BasicRecord
   10 record_type char(1);
   10 item2 bigint;
   10 item3 decimal(7);
   10 item4 char(8); 
end

Program ProgramX type basicProgram
   myRecordA RecordA;
   myRecordB RecordB {redefines = "myRecordA"};
   
   function main();
     get myRecordA;
     while (myRecordA not endOfFile)
       if (myRecordA.record_type == "A")
         myFunction01(myRecordA.item1);
       else
         myFunction02(myRecordB.item2, myRecordB.item3, myRecordB.item4);
       end
       get myRecordA;
     end
   end 
end
En el bucle, la función actúa de la manera siguiente:
  1. En el primer campo del registro de entrada busca un código que identifica cómo están estructurados el resto de los datos.
  2. Procesa los otros campos de los datos recuperados utilizando el registro de entrada o un segundo registro básico. El segundo registro hace referencia a la misma área de memoria que el registro de entrada, pero la estructura es diferente.

Para declarar un registro como una redefinición de otro, puede utilizar la propiedad redefines, que acepta un serie que identifica otro registro. Esta propiedad solo está disponible en una declaración de registro, no en una definición de componente de registro.

El registro original y el de recubrimiento pueden ser cualesquiera tipos de registro fijo, con las instrucciones siguientes:

Un registro de recubrimiento no tiene ninguna información (que no sea la estructura) que esté en el registro original. Un registro indexado puede redefinir un registro serie, por ejemplo, pero el archivo al que accede el registro indexado se identifica en el componente del registro indexado y no en el componente del registro serie.

Conceptos relacionados
Referencias a variables en EGL

Conceptos relacionados
Declarar variables y constantes en EGL

Consulta relacionada
Diseño interno de los registros SQL

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.