レコード・パーツの概要

レコード・パーツは、他のデータ・パーツの集合です。レコード・パーツ内のデータ・パーツは、フィールドと呼ばれます。レコード・パーツには、任意の数のフィールドを含めることができます。フィールドは、プリミティブ、データ項目、またはその他のレコードのいずれでもかまいません。

単純なレコード・パーツは、その他のデータ・パーツのグループです。この例では、3 つの異なるプリミティブが、単一のレコード・パーツにグループ化されて います。
Record primitiveRec type BasicRecord
    integerField  INT;
    stringField   STRING;
    charField     CHAR(30);
end
このレコード・パーツに基づいて変数を作成する作業は、Dataitem パーツやプリミティブに基づいて変数を作成する作業と似ています。
myRecVar primitiveRec;
レコード変数自体には値が含まれていませんが、レコード内のフィールドには値が含まれています。レコード・パーツに基づいて変数を作成すると、レコード内のフィールドに対して、あたかも個々の変数のようにアクセスできるようになります。
myRecVar.integerField = 6;
myRecVar.stringField = "Hello";
myRecVar.charField = "Character field";
ただし、レコードは単一のユニットとしての振る舞いを続けるため、レコードを単一のパラメーターとして関数に渡すことができます。次の例を参照してください。
myFunction(myRecVar);

レコード・ステレオタイプ

レコード・パーツは、ステレオタイプを使用して特殊化できます (ステレオタイプを参照)。 type キーワードを 使用して、レコード・パーツに対してステレオタイプを設定します。 次の例では、レコード・パーツのステレオタイプを BasicRecord としています。
Record myCustomerRecord type BasicRecord
    customerNumber     INT;
    customerFirstName  STRING;
    customerLastName   STRING;
    customerBalance    FLOAT;
end

BasicRecord ステレオタイプは、 汎用レコード・パーツを示しています。1 つ以上の変数をグループ化して簡単にする場合、このステレオタイプを使用できます。

レコード・パーツは、通常、データ・ソース内のレコードや他の関連データのグループを表すため、適用できる他のステレオタイプで、特定の種類のデータ・ソースで使用するレコード・パーツを特殊化できます。例えば、SQLRecord ステレオタイプは、SQL データベースで使用するようにレコード・パーツを適合させます。このタイプのレコード・パーツを作成するときは、 プロパティーを使用して、レコードとそのフィールドを、データベース表とその列にリンクさせます。
Record myCustomerRecordSQL type SQLRecord
    { tableNames = [["Customer"]], keyItems = [customerNumber] }
    customerNumber     int     {column = "CustomerID"};
    customerFirstName  string  {column = "FirstName"};
    customerLastName   string  {column = "LastName"};
end
この場合、CustomerIDFirstName、および LastName という列を持つ Customer というデータベース表に、レコードがリンクされます。 このようなデータベース表にレコードをリンクさせると、EGL はこの情報を使用して、ユーザーとレコードとの対話に基づいてデータベースにアクセスします。 つまり、まるでデータベース内の行を扱うかのように、レコードを使用できることになります。
例えば、以下のコードでは、前の例で定義したレコード・パーツを使用して、データベースから特定の行を取り出します。
myRecordVar myCustomerRecordSQL;
myRecordVar.customerNumber = 5;
get myRecordVar;
SysLib.writeStderr("Name: " +
    myRecordVar.customerFirstName + " " +
    myRecordVar.customerLastName);

レコード・パーツに追加できるその他のステレオタイプには、IndexedRecord、SerialRecord、RelativeRecord、および CSVRecord があります。これらは、さまざまなタイプのファイルへのアクセスに使用されます。

構造化レコード

レコード・パーツのフィールドのレイアウトと編成に関する詳細を提供するために、レコード・パーツを構造化 できます。構造化レコードの各フィールドには、レベル番号 (そのフィールドと他のフィールドとの関係を示す任意の番号) が割り当てられます。

非構造化レコードのフィールドにはレベル番号がないため、各フィールドは同じレベルにあると見なされます。構造化レコードでも、このような振る舞いをすることが あります。その場合は、各フィールドが同じレベル番号になります。
record structRec1 type BasicRecord
    10 field1 int;
    10 field2 int;
    10 field3 int;
end
レベル番号を変えると、レコード内に副構造が作成されます。
Record CustomerRecord type BasicRecord
  10 phoneNumber CHAR(10); 
    20 areaCode CHAR(3); 
    20 localNumber CHAR(7);
end
この場合、フィールド areaCode および localNumber が、 フィールド phoneNumber のサブフィールドになります。 phoneNumber フィールドにアクセスすると、フィールドの値全体を取得することができます。areaCode フィールドまたは localNumber フィールドにアクセスすると、phoneNumber フィールドに保存されている値の一部を取得できます。

構造化レコードは、固定長のフィールドに制限されます。構造化レコードの制限と使用法の詳細については、レコードを参照してください。


フィードバック