Stereotyp 'SQLRecord'
Der Stereotyp 'SQLRecord' passt einen Datensatzabschnitt (Record) für die Verwendung mit einer relationalen Datenbank an.
Durch Stereotypisierung (siehe Stereotype) werden eindeutige Eigenschaften auf Datensatzebene und Feldebene bereitgestellt. Wenn Sie eine Variable dieses Typs als Ziel einer EGL-Datenzugriffsanweisung wie beispielsweise 'get' oder 'replace' verwenden, wird ein spezifisches Verhalten ausgelöst.
EGL kann SQLRecord-Abschnitte automatisch auf Basis von Informationen aus Ihrer Datenbank erstellen. Weitere Informationen finden Sie unter Datenzugriffsanwendung erstellen im Handbuch für EGL-Programmierer.
- tableNames
- Eine zweidimensionale Feldgruppe, in der jedes Element eine SQL-Tabelle angibt, die Sie der Datensatzdefinition zuordnen wollen. Sie können optional
einen Tabellenkennsatz (SQL-Aliasnamen) für diese Tabelle angeben (siehe 'Tabellenkennsätze' in diesem Thema). Wenn Sie keine Tabellennamen angeben, nimmt die
Eigenschaft standardmäßig den Namen des SQL-Datensatzes an. Der Code im folgenden Beispiel weist EGL an, davon auszugehen, dass Sie bei jeder Verwendung der
Variablen CustomerRecord in einer Datenzugriffsanweisung die Datenbanktabelle namens 'Customer' verwenden:
Record CustomerRecord type SQLRecord { tableNames = [["Customer"]] } ... end - defaultSelectCondition
- Gibt Bedingungen an, die Teil der WHERE-Klausel in SQL-Standardanweisungen werden. Die WHERE-Klausel ist von Bedeutung, wenn ein SQL-Datensatz
in einer EGL-Anweisung 'execute', 'open' oder 'get' verwendet wird.
In den meisten Fällen kommt durch die SQL-Standardauswahlbedingung eine zweite Bedingung hinzu, die auf einer Zuordnung zwischen den Schlüsselfeldwerten im SQL-Datensatz und den Schlüsselspalten in der SQL-Tabelle basiert.
Geben Sie die Bedingung mithilfe der Direktive '#sqlCondition' an. Weitere Informationen finden Sie unter #sqlCondition, Direktive.
- tableNameVariables
- Sie können mindestens eine Variable angeben, deren Inhalt zur Ausführungszeit festlegt, auf welche Datenbanktabellen zugegriffen werden soll, wie im folgenden
Beispiel:
myTable STRING; Record CustomerRecord type SQLRecord { tableNameVariables = [["myTable"]] } ... end myCustomer CustomerRecord; function main() myTable = requestTableName(); get myCustomer; displayCustomer(myCustomer); end - Die EGL-Anweisung get myCustomer liest Daten aus der Datenbanktabelle, die von der Variablen 'myTable' benannt wird. Durch Verwendung der Variablen 'myTable' ist es möglich, mehrere Tabellen mit ähnlichen Spalten zu verwenden. Die Logik legt fest, auf welche Tabelle zugegriffen werden soll. Sie brauchen daher nicht für jede Tabelle neuen EGL-Code zu schreiben.
- Beachten Sie, dass tableNameVariables eine zweidimensionale Feldgruppe annimmt. Verwenden Sie die zweite Dimension zur Angabe eines
Tabellenkennsatzes zusätzlich zu der Variablen, die den Tabellennamen enthält (siehe 'Tabellenkennsätze' in diesem Thema):
{ tableNameVariables = [["myTable", "T1"], ["myOtherTable", "T2"]] } - keyItems
- Diese Feldgruppe gibt ein Feld oder mehrere Felder in dem Datensatz an, aus dem/denen sich der Schlüssel zusammensetzt. Der Schlüssel wird verwendet, um einen Abgleich mit entsprechenden Feldern in der Datenbanktabelle durchzuführen. Für die Angabe dieser Felder müssen Sie jeweils einen unqualifizierten Verweis verwenden. Verwenden Sie beispielsweise myItem und nicht myRecord.myItem. Denken Sie daran, dass Sie in einer EGL-Anweisung auf ein Schlüsselfeld genau so verweisen können wie auf alle anderen Felder. Sie können diese Schlüsselwerte überschreiben, indem Sie das Schlüsselwort 'usingKeys' mit einer Anweisung 'get' oder 'open' angeben.
- fieldsMatchColumns
- Setzen Sie diese Eigenschaft auf YES, wenn der Typ, die Länge, die Anzahl der Dezimalstellen und die Optionalität der Dateneingabe (Nullfähigkeit) für jedes Feld genau mit diesen Eigenschaften in den entsprechenden Datenbankspalten übereinstimmen. Mithilfe dieser Eigenschaft können Sie die Konsistenzprüfungen umgehen, die EGL-Programme, die für Java™ generiert sind, ausführen, wenn Daten aus einer Datenbank abgerufen werden. Dadurch wird der Prozess beschleunigt. Der Standardwert ist NO.
Tabellenkennsätze
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
Das Feld customerNumber (Kundennummer) ist ein Primärschlüssel in der Tabelle Customer (Kunde) und ein Fremdschlüssel in der Tabelle Order (Bestellung). Nachdem Sie die beiden Tabellen verknüpft haben, müssen Sie jedoch die Bezeichnung T1 bzw. T2 verwenden, um anzugeben, auf welche Kundennummer (customerNumber) der Code verweist.