TYPE 属性を使用すると、構造体メンバーおよび属性を別の宣言から継承できます。次の形式で記述します。reference は変数の参照です。
TYPE(reference)
または
TYPE reference
たとえば、変数 INTEGER が固定 2 進数として宣言されている場合、固定 2 進数として宣言する必要がある別の変数を TYPE(INTEGER) として宣言できます。次に例を示します。
DECLARE INTEGER FIXED BIN(31); /* TYPE DEFINITION */ DECLARE CODE TYPE(INTEGER); /* TYPED VARIABLE */
この例では、INTEGER から CODE に属性がコピーされるため、CODE の宣言は次のようになります。
DECLARE CODE FIXED BIN(31);
前記の例では、INTEGER は型定義と呼ばれ、CODE は型付き変数と呼ばれます。型定義は通常の変数宣言です。型定義には記憶域が割り当てられないため、基底付き記憶域クラスを指定できます。
次の例では、TYPE 属性を使用して、ある宣言から別の宣言に構造体メンバーを複製しています。
DECLARE 1 TEMPLATE BASED, /* TYPE DEFINITION */ 2 NAME CHAR(45), 2 SALARY FIXED BIN(15), 2 EMP_NO FIXED BIN(15); DECLARE EMPLOYEE_INFO TYPE TEMPLATE; /* TYPED VARIABLE */
TEMPLATE のメンバーが複製されて EMPLOYEE_INFO の宣言が展開されると、EMPLOYEE_INFO の宣言は次のようになります。
DECLARE 1 EMPLOYEE_INFO 2 NAME CHAR(45), 2 SALARY FIXED BIN(15), 2 EMP_NO FIXED BIN(15);
TYPE 属性は、次のいずれかの場所で使用できます。
次の例は、TYPE 属性のすべての使用方法を示しています。
/*----------- TYPE DEFINITION -----------*/ /* (LINE MAY ALSO BE USED AS A VARIABLE) */ DECLARE LINE CHAR(80) VARYING; /*---------------------------------------*/
/* VARIABLE DECLARATION */ DECLARE FORMAT_LINE TYPE(LINE); /* PARAMETER DECLARATION */ DECLARE PARAM TYPE(LINE); /* PARAMETER DESCRIPTOR */ DECLARE WRITE_LINE ENTRY(TYPE(LINE)); /* RETURNS OPTION IN PROCEDURE STATEMENT */ GET_LINE: PROC RETURNS(TYPE(LINE)); /* RETURNS OPTION IN ENTRY STATEMENT */ READ_LINE: ENTRY RETURNS(TYPE(LINE)); /* RETURNS ATTRIBUTE IN DECLARE STATEMENT (USING ALTERNATE SYNTAX)*/ DECLARE GET_LINE ENTRY RETURNS(TYPE LINE);
型付き変数は、次の属性のみを型定義から継承できます (記憶域クラスは継承されません)。