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.

Jeder angepasste Datensatztyp auf Basis des Stereotyps 'SQLRecord' hat die folgenden optionalen Eigenschaften:
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

Jedes Element in einer Feldgruppe vom Typ 'tableNames' oder 'tableNameVariables' kann einen Tabellenkennsatz einschließen. DB2 Version 7 unterstützt Tabellenkennsätze mit einer Länge von bis zu 18 Zeichen. Bei DB2 Version 8 gibt es keinen Grenzwert für die Länge von Tabellenkennsätzen. Anhand solcher Kennsätze, die in SQL als Aliasnamen bezeichnet werden, können Sie zwei Spalten mit demselben Namen voneinander unterscheiden, wenn Sie eine SQL-Anweisung JOIN zum Kombinieren von Tabellen verwenden. Das folgende Beispiel zeigt eine Feldgruppe vom Typ 'tableNames':
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.


Feedback