Globale temporäre Tabellen (GTTs) sind spezielle
transparente Tabellen, die zur Ablage temporärer Daten vorgesehen sind. Diese Daten sind nur innerhalb einer
Datenbank-LUW vorhanden
und es kann nur von einem Verwender darauf zugegriffen werden. GTTs dienen dem Speichern temporärer
Zwischenergebnisse, um komplizierte Datenbankprozesse in mehrere Schritte aufzuteilen. GTTs sind hierfür zweckgebunden und haben dadurch deutlich geringere Verwaltungskosten als normale transparente Tabellen.
Das Konzept der GTTs sieht vor, dass eine GTT zu Beginn einer Datenbank-LUW immer leer ist und hierfür
am Ende jeder Datenbank-LUW geleert werden muss. Datenbanksysteme bieten in aller Regel eine native
Unterstützung dieses Konzepts, indem die Daten einer Datenbanktabelle, die als GTT gekennzeichnet ist, implizit transaktionsspezifisch sind und dass diese Daten am Ende einer Datenbank-LUW also bei einem
Datenbank-Commit oder einem
Datenbank-Rollback automatisch gelöscht werden.
Im ABAP Dictionary kann für eine Datenbanktabelle die
TabellenartGlobale temporäre Tabelle gewählt werden und eine solche
Tabelle wird als GTT in der Datenbank ausgeprägt. Um plattformabhängiges Verhalten und eventuelle Überraschungen beim Umgang mit GTTs zu vermeiden, gelten beim Zugriff auf eine GTT des ABAP Dictionary mit
Open SQL folgende zusätzlichen Regeln:
Wenn eine GTT des ABAP Dictionary durch eine ändernde
Open-SQL-Anweisung gefüllt wurde, muss sie vor dem Ende der aktuellen
Datenbank-LUW explizit geleert werden. Hierfür können verwendet werden:
Die Open-SQL-Anweisung DELETE FROM dbtab ohne Angabe einer WHERE-Bedingung.
Wenn eine GTT des ABAP Dictionary, die mit Open SQL gefüllt wurde, beim Eintreten eines
impliziten Datenbank-Commits nicht explizit mit einem der
zuvor aufgeführten Mittel geleert wurde, tritt unabhängig von ihrem Inhalt der Laufzeitfehler COMMIT_GTT_ERROR auf.
Abgesehen von diesen Regeln können GTTs wie normale transparente Tabellen verwendet werden. Bezüglich
ihrer Definition im ABAP Dictionary haben die folgenden Einstellungen vordefinierte Werte, die nicht geändert werden können:
Die Anzahl der Schlüsselfelder einer GTT ist auf 15 begrenzt.
Hinweise
Dass beim Zugriff auf eine GTT des ABAP Dictionary mit Open SQL das explizite Leeren der Tabelle vor einem impliziten Datenbank-Commit erzwungen wird, hat folgende Gründe:
Es dient der Verständlichkeit des Programms. Wenn innerhalb einer Programmeinheit ein impliziter Datenbank-Commit auftritt, beispielsweise durch einen
RFC, kann es für den Entwickler
überraschend sein, dass die Tabelle danach leer ist, da das Datenbanksystem sie implizit am Ende der Datenbank-LUW gelöscht hat.
Es verhindert Fehler durch eventuelle Plattformabhängigkeiten. Es ist nicht garantiert, dass
jede Datenbankplattform bei einem impliziten Datenbank-Commit die Daten einer GTT löscht. Durch das explizite Leeren der GTT wird dies garantiert.
Nur die Variante DELETE FROM dbtab
ohne Angabe einer WHERE-Bedingung verhindert den Laufzeitfehler COMMIT_GTT_ERROR.
Andere Varianten der DELETE-Anweisung verhindern den Laufzeitfehler nicht, auch wenn sie die gesamte Tabelle leeren.
Die zusätzlichen Regeln gelten nur für
ändernde Zugriffe mit
Open SQL. Wenn eine GTT ausschließlich mit Mitteln von
Native SQL oder
AMDP gefüllt wird, wird
bei einem impliziten Datenbank-Commit keine Ausnahme ausgelöst. In aller Regel wird die GTT dann
von Datenbanksystem geleert. Umgekehrt verhindert das Leeren einer mit Open SQL gefüllten Tabelle mit Native SQL oder AMDP nicht den Laufzeitfehler COMMIT_GTT_ERROR.
Es wird empfohlen, auf GTTs des ABAP Dictionary nur mit Open SQL zuzugreifen.
Für das Füllen von GTTs sind insbesondere INSERT-Anweisungen mit einer
Subquery hinter FROM gut geeignet, da die Operation dann ausschließlich auf der Datenbank stattfindet und kein Datentransport zwischen Datenbank und Applikationsserver notwendig ist.
Wenn die Daten einer GTT nur für die Dauer eines Datenbankzugriffs benötigt werden, kann die entsprechende Anforderung unter Umständen auch durch
allgemeine Tabellenausdrücke erledigt werden.
Beim Zugriff auf eine GTT des ABAP Dictionary mit Open SQL wird die Syntaxprüfung in einem
strikten Modus ausgeführt, welche eine Anweisung strenger behandelt als die normale Syntaxprüfung.