EGL unterstützt den Zugriff auf relationale Datenbanken über SQL.
Die typische SQL-Verarbeitung beginnt mit einer EGL-Anweisung 'open'. Die Anweisung 'open' sendet eine Gruppe von Kriterien an die Datenbankmanagement-Software und ruft im Gegenzug eine Ergebnismenge (Zeilen übereinstimmender Daten) ab. Die Ergebnismenge protokolliert die Zeile, auf die sie zeigt. Mithilfe einer der Varianten der Anweisung 'get' können Sie Daten aus der Ergebnismenge sequenziell oder nach relativer bzw. absoluter Position lesen.
Java-Code verwendet ein Anweisungsobjekt 'Statement' zum Erstellen eines Ergebnismengenobjekts 'ResultSet'.
Eine Anweisung 'get' mit einer Positionsoption (wie beispielsweise 'next' oder 'absolute') generiert eine SQL-Anweisung FETCH in COBOL (und eine äquivalente Anweisung in Java), um die Daten aus einer bestimmten Zeile abzurufen.
Wenn Sie eine Ergebnismenge mit der Anweisung 'get' erstellen, ruft EGL die erste Zeile ab und schließt die Ergebnismenge daraufhin. Da 'get' die Ergebnismenge schließt, können Sie anschließend keine positionsgebundene Anweisung 'get' ausgeben. Um wiederholte positionsgebundene get-Anweisungen zu verwenden, müssen Sie die Verarbeitung mit einer EGL-Anweisung 'open' beginnen und am Ende eine EGL-Anweisung 'close' ausgeben.
EGL generiert SQL-Anweisungen auf Basis der Eigenschaften und Werte Ihrer SQL-Datensatzvariablen (siehe Stereotyp 'SQLRecord').
Record CustomerRecord type SQLRecord
{ tableNames=[["Customer"]], keyItems=["customerNumber"] }
customerNumber INT {column = "customer_number"};
customerName STRING {column = "customer_name"};
customerBalance DECIMAL(9,2) {column = "customer_balance"};
end
program CustomerTest type BasicProgram
myCustomer CustomerRecord;
function main()
myCustomer.customerNumber = 1001;
get myCustomer;
printCustomer(myCustomer);
end
end
select
customer_number, customer_name, customer_balance
into :myCustomer.customerNumber, :myCustomer.customerName,
:myCustomer.customerBalance
from Customer
where
customer_number = :myCustomer.customerNumber
Diese SQL-SELECT-Klausel ist über den Editor sichtbar. Mithilfe des Editors können Sie den Code explizit machen, indem Sie ihn in eingebettete SQL-Anweisungen umwandeln, die geändert werden können. Weitere Informationen finden Sie unter Implizite SQL-Anweisungen anzeigen im Handbuch für EGL-Programmierer.
Wenn Sie bereits wissen, wie SQL-Anweisungen geschrieben werden, bietet das Erstellen eingebetteter SQL-Anweisungen mehr Flexibilität.
Für die von Ihnen eingebetteten SQL-Anweisungen führt EGL Syntaxprüfungen oder andere Prüfungen nur in sehr geringem Umfang durch. Implizite SQL-Anweisungen werden stets von eingebetteten SQL-Anweisungen überschrieben, und zwar auch dann, wenn die eingebetteten Anweisungen Fehler enthalten. Aus diesem Grund ist bei der Verwendung eingebetteter SQL-Anweisungen Vorsicht geboten.
Informationen zur Syntax der Direktive '#sql' sowie entsprechende Beispiele finden Sie im Abschnitt 'Direktive '#sql''.
Dynamischer SQL-Code wird zur Ausführungszeit assembliert und ist besonders in Situationen nützlich, in denen Benutzer Abfragen über Ihre Anwendung selbst generieren. So verfügt ein Benutzer möglicherweise über eine Liste von Kontrollkästchen für potenzielle Berichtsfelder. Ihre Anwendung kann eine Anweisung SELECT auf Basis der von Ihrem Benutzer bereitgestellten Kriterien erstellen.
Dynamisches SQL kann sich negativ auf die Leistung auswirken. Daher müssen Sie diesen Nachteil gegen die zusätzlich gebotene Flexibilität abwägen.
Als Regel gilt: Verwenden Sie die EGL-Anweisung 'prepare', um die Auswahlkriterien, die Art der Datenaggregation oder die Reihenfolge der zurückgegebenen Zeilen zu variieren. Diese Aspekte werden von den Klauseln WHERE, HAVING, GROUP BY und ORDER BY gesteuert. Weitere Informationen finden Sie unter prepare.
Im Rahmen der Kompatibilität zwischen EGL und VisualAge Generator können Sie mithilfe von Tabellenvariablen dynamisch eine Tabelle für die Laufzeitverarbeitung auswählen. Weitere Informationen zu dieser Option finden Sie unter Stereotyp 'SQLRecord'. Die dynamische Auswahl von Tabellen erfolgt üblicherweise anhand der Anweisung 'prepare'.