sql (Direktive)

Verwenden Sie die Direktive 'sql', um impliziten SQL-Code anzupassen oder um vollständig neuen Code zu schreiben.

Weitere Informationen zu implizitem SQL-Code im Vergleich zu eingebettetem SQL-Code finden Sie unter SQL-Datenzugriff.

Normalerweise wird eingebetteter SQL-Code mithilfe des Schlüsselworts 'with' eingeführt. Die Anweisung 'execute' bildet eine Ausnahme, da sie das Schlüsselwort 'with' nicht verwendet. Als Nächstes wird das Schlüsselwort 'sql', gefolgt von einer linken geschweiften Klammer ohne Leerzeichen dazwischen verwendet. Der eingebettete Code wird mit einer rechten geschweiften Klammer beendet, wie im folgenden Beispiel gezeigt:
get myCustomer with #sql{
  SELECT customer_name
  FROM Customer
  WHERE customer_number = :myCustomer.customerNumber };

Ein vorangestellter Doppelpunkt gibt eine Hostvariable an (eine Variable, die in der Hostsprache für SQL, in diesem Fall EGL, definiert ist), beispielsweise :myCustomer.customerNumber.

Sie können impliziten SQL-Code in eingebetteten Code konvertieren und diesen dann ändern. Weitere Informationen hierzu finden Sie im Handbuch für EGL-Programmierer.

Eingebettete SQL-Anweisungen haben Vorrang vor impliziten SQL-Anweisungen. Im folgenden negativen Beispiel gibt es drei miteinander in Konflikt stehende Schlüsselfelder, die impliziert oder aufgerufenen werden:
get myCustomer usingKeys myCustomer.customerName with #sql{
  SELECT customer_name
  FROM Customer
  WHERE customer_number = :myOrders.customerNumber };
Das erste Schlüsselfeld ist das im Datensatzprototyp 'CustomerRecord' angegebene Feld (myCustomer.customerNumber). Die Klausel 'usingKeys' überschreibt diesen Standardschlüssel mit myCustomer.customerName in dem von EGL generierten impliziten SQL-Code, wenn nicht auch eingebetteter Code vorliegt. Dieser eingebettete Code überschreibt den impliziten Code und verwendet myOrders.CustomerNumber als den tatsächlichen Schlüssel zum Lesen von Daten aus der Datenbank.

Feedback