SQLRecord ステレオタイプは、レコード・パーツをリレーショナル・データベースで使用するために特殊化します。
ステレオタイプ (ステレオタイプを参照) は、レコード・レベルとフィールド・レベルで固有のプロパティーを提供します。get や replace などの EGL データ・アクセス文のターゲットとしてこのタイプの変数を使用すると、 特定の振る舞いを起動します。
EGL では、データベースからの情報に基づいて SQLRecord パーツを自動的に作成できます。 詳しくは、「EGL プログラマー・ガイド」の『データ・アクセス・アプリケーションの作成』を参照してください。
Record CustomerRecord type SQLRecord
{ tableNames = [["Customer"]] }
...
end
たいていの場合、SQL デフォルト選択条件は第 2 条件を補足します。この第 2 条件は、SQL レコード内のキー・フィールド値と、SQL テーブルのキー列の関連付けが基礎となります。
#sqlCondition ディレクティブを使用して条件を指定します。 詳しくは、#sqlCondition ディレクティブを参照してください。
myTable STRING;
Record CustomerRecord type SQLRecord
{ tableNameVariables = [["myTable"]] }
...
end
myCustomer CustomerRecord;
function main()
myTable = requestTableName();
get myCustomer;
displayCustomer(myCustomer);
end
{ tableNameVariables = [["myTable", "T1"],
["myOtherTable", "T2"]] }
package com.CompanyB.CustomerPackage;
Record CustomerRecord type SQLRecord
{ tableNames=[["Customer", "T1"]], keyItems=["customerNumber"] }
customerNumber INT {column = "customer_number"};
customerName STRING {column = "customer_name"};
customerBalance DECIMAL(9,2) {column = "customer_balance"};
end
Record OrderRecord type SQLRecord
{ tableNames=[["Orders", "T2"]], keyItems=["orderNumber"] }
orderNumber INT {column = "order_number"};
customerNumber INT {column = "customer_number"};
orderTotal DECIMAL(9,2) {column = "order_total"};
end
program CustomerTest type BasicProgram
myCustomer CustomerRecord;
myOrder OrderRecord;
function main()
myCustomer.customerNumber = 1001;
get myCustomer with
#sql{
select
customer_name, order_total
from Customer T1, Orders T2
join Orders on T1.customer_number = T2.customer_number
where
T1.customer_number = :myCustomer.customerNumber
}
into myCustomer.customerName, myCustomer.customerBalance;
end
end
customerNumber フィールドは、Customer テーブルの主キーであり、Order テーブルの外部キーです。 ただし、2 つのテーブルを結合後、T1 または T2 の指定を使用して、コードがどちらの customerNumber を参照するかを指定する必要があります。