Überlegungen zum Hinzufügen mit SQL

Im Kontext der SQL-Abfragesprache fügt die Anweisung 'add' einen Datensatz oder eine Gruppe von Datensätzen zu einer Datenbank hinzu.

EGL fügt die Informationen auf Basis der Werte in den Schlüsselfeldern der Datensatzvariablen hinzu.

EGL erstellt eine SQL-Anweisung INSERT in Ihrem generierten Code auf Basis der Werte und Eigenschaften der SQL-Datensatzvariablen in Ihrer EGL-Anweisung 'add'. Weitere Informationen zu diesem impliziten SQL-Code finden Sie unter SQL-Datenzugriff. Alternativ können Sie eine Direktive vom Typ '#sql' verwenden, um Ihre eigene eingebettete SQL-Anweisung INSERT zu schreiben (siehe sql (Direktive)).

Wenn die Anweisung 'add' eine einzelne SQL-Datensatzvariable angibt, erstellt die Anweisung eine einzelne Zeile in der Datenbank. Sie können auch eine dynamische Feldgruppe aus SQL-Datensatzvariablen angeben. In diesem Fall erstellt die Anweisung für jedes Member der Feldgruppe jeweils eine Zeile.

Syntax

Syntaxdiagramm für die Anweisung 'add'
SQL-Datensatzvariable
Verweist auf einen Speicherbereich, der eine einzelne Datenzeile enthält, die der Datenbank hinzugefügt werden soll.
with #sql{ SQL-Anweisung }
Wenn Sie ein erfahrener SQL-Programmierer sind, können Sie den von EGL generierten SQL-Code überschreiben, indem Sie Ihre eigene SQL-Anweisung INSERT einbetten (siehe sql (Direktive)). Zwischen '#sql' und der linken geschweiften Klammer darf kein Leerzeichen stehen.
dynamische_SQL-Feldgruppe
Der Name eines dynamischen Feldgruppe aus SQL-Datensätzen. Die Elemente werden in die Datenbank jeweils an der Position eingefügt, die von den elementspezifischen Schlüsselwerten angegeben wird. Die Operation wird beim ersten Fehler oder nach dem Einfügen aller Elemente gestoppt.
Atomic
Unterstützung für 'Atomic' und 'Atomic(no)'.
'Atomic' bedeutet, dass alle Zeilen erfolgreich eingefügt werden müssen. Andernfalls schlägt die Einfügeoperationen für mehrere Zeilen fehl. Dies ist der Standardwert.
'Atomic(no)' bedeutet, dass einzelne Zeilen innerhalb der Zeilengruppe erfolgreich eingefügt oder abgelehnt werden können. Mithilfe von GET DIAGNOSTICS können Sie ermitteln, welche Zeilen nicht erfolgreich eingefügt wurden. Siehe Hinweise zur Anweisung 'get diagnostics' mit SQL.
Anmerkung:
  1. 'add Atomic' wird unter Informix nicht unterstützt, wenn die Ausführung nicht im Protokollierungsmodus erfolgt. Hinzufügungen unter Verwendung der nicht atomaren Methode finden weiterhin statt.
  2. 'add Atomic(no)' funktioniert in verschiedenen Datenbanken unterschiedlich. Bei Oracle, DB2 for i5/OS und SQL Server werden die Zeilen nicht hinzugefügt, sobald ein Fehlschlag auftritt. In anderen Datenbanken werden alle Zeilen mit Ausnahme der fehlgeschlagenen Zeilen hinzugefügt.
Einschränkung: Bei Multiple-Row-Funktionen unterstützt die Anweisung 'add' keine expliziten SQL-Anweisungen.

Implizite SQL-Anweisung INSERT

Wenn Sie eine SQL-Datensatzvariable oder SQL-Datensatzfeldgruppe in der Anweisung 'add', aber keine eingebettete SQL-Anweisung mit der Direktive '#sql' angeben, erstellen Sie einen impliziten SQL-Code. Das Format der von EGL generierten impliziten SQL-Anweisung INSERT sieht wie im folgenden Code aus:
  INSERT INTO Tabellenname
    (Spalte01, ... SpalteNN)
    values (:Datensatzelement01, ... :DatensatzelementNN)

Die Schlüsselwerte im Datensatz legen die logische Position der Daten in der Tabelle fest. Das Datenbankmanagementsystem bearbeitet Datensätze ohne Schlüssel gemäß der SQL-Tabellendefinition und den Regeln der Datenbank. Der Datensatzabschnitt, auf dem Ihre Datensatzvariable basiert, ordnet Datensatzfelder zu Spalten in der Datenbanktabelle zu. EGL verwendet diese Zuordnungen, um die Zuordnung von Werten in der Anweisung INSERT zu bestimmen. Die Verwendung von Hostvariablen, d. h. von Variablen, die in der Sprache für das SQL-Hosting (in diesem Fall EGL) definiert sind, wird durch einen vorangestellten Doppelpunkt angezeigt. Weitere Informationen finden Sie unter Hostvariablen.

Wenn Sie ein Datensatzfeld als schreibgeschützt deklariert haben, wird dieses Feld nicht in die generierte SQL-Anweisung INSERT eingeschlossen, und das Datenbankmanagementsystem setzt den Wert der zugehörigen SQL-Tabellenspalte auf den Standardwert, der beim Definieren der Spalte angegeben wurde.

Beispiele

Das folgende Beispiel zeigt die Anweisung 'add':

if (userRequest == "A")
   try
      add record1;
   onException(sqlEx SQLException)
      myErrorHandler(12);
   end
end
Beispiel mit einer dynamischen Feldgruppe aus SQL-Datensätzen:
try
   add employees;
onException(sqlEx SQLException)
   sysLib.rollback();
end

Fehlerbedingungen

Die folgenden Situationen können zu Fehlern führen:
  • Sie geben eine SQL-Anweisung eines anderen Typs als INSERT in Ihrer #sql-Direktive an.
  • Sie geben einige, aber nicht alle erforderlichen Klauseln der SQL-Anweisung INSERT in Ihrer #sql-Direktive an.
  • Sie geben eine SQL-Anweisung INSERT an (oder Ihr EGL-Code generiert eine implizite SQL-Anweisung), die eine der folgenden Merkmale aufweist:
    • Die Anweisung gehört zu mehr als einer SQL-Tabelle.
    • Alle Ihre Hostvariablen wurden als schreibgeschützt deklariert.
    • Die Anweisung ist einer Spalte zugeordnet, die entweder nicht vorhanden ist oder die mit der zugehörigen Hostvariablen nicht kompatibel ist.

Feedback