Typische Support Anfragen in SAP Systemen

Typische Support Anfragen in SAP® Systemen

und wie das SQL Cockpit uns das Leben vereinfachen kann

Wer kennt das nicht. Die Systeme sind aufgesetzt und eingestellt, die Erweiterungen programmiert und die Schnittstellen laufen. Die Tests waren erfolgreich und das SAP System wurde produktiv gesetzt. Dennoch kommen immer wieder Supportanfragen herein. 

Das kann natürlich verschiedenste Gründe haben. Nehmen wir mal an, dass die Entwicklungen sehr sauber waren, das System gründlich getestet wurde und wenig es kaum neue Anforderungen gibt, die umgesetzt werden, gibt. Unrealistisch? Wahrscheinlich! Aber das es in einem agilen Umfeld mit laufenden Erweiterungen an den Systemen zu Fehlern kommt, ist irgendwie nachvollziehbar. Da ist ja immer alles in Bewegung. 

Aber was sind die häufigsten Gründe für Fehlertickets abseits vom typischen Projektgeschäft? Mir fallen da spontan 2 Gründe ein. 

  1. Verständnisfragen. Gerade, wenn User Transaktionen selten aufrufen, kann es zu Fragen wie „Was muss ich hier eingeben? Warum bekomme ich da einen Fehler?“ . Das kann man meist mit guten Schulungsunterlagen in den Griff bekommen.
  2. seltene Datenkonstellationen. Da kommt auf einmal ein Kunde vom Typ X, aus dem Land Y und der VKORG Z daher. Und da funktioniert dann die Partnerfindung im Beleg plötzlich nicht. Der Grund kann sein, dass diese seltene Kombination beim Test nie abgefragt wurde. Solche Datenkonstellationen können entweder durch Benutzer eingegeben worden sein, aber auch durch Programme verursacht worden sein (zB durch eine Migration oder Schnittstelle)

Wie löst man nun diese Fälle von Datenproblemen?

Im ersten Schritt schaut man sich wohl den Beleg, die Stammdaten des Partners und dann vielleicht auch das Customizing an. Über die regulären Transaktionen im SAP System. Wann man dann gleich draufkommt, super! Fall gelöst.

Aber meistens kommt man da nicht weiter. Vor allem im Second und Third Level Support ist man eher im Programm Code und auf der Datenbank unterwegs um Fehler zu finden und auch um abzuprüfen, ob es auch mehrere ähnlich gelagerte Fälle gibt. Und genau da lässt einen das SAP System meist ordentlich im Stich.

Der übliche Weg führt einen dann in die SE16 (wer den Transaktionscode nicht kennt: da geht es zur Einzeltabellenansicht). Dort sucht man dann nach dem entsprechenden Datensatz und hantelt sich dann langsam von Tabelle zu Tabelle. Mit dem Umweg über das Notepad oder Excel, in dem man die Daten copy&paste zwischen lagert. Das ist mühsam und aufwendig. Aber noch schlimmer: ich muss beim nächsten Mal die gleichen Schritte nochmal machen. Und ganz ehrlich, bei SAP geht es um Daten. Daten, die in einer Datenbank abgelegt sind. Und seit Anbeginn (das sind auf R/2 bezogen 42 und auf R/3 gerechnet 30 Jahre) gibt es keine vernünftige Lösung, damit diese Daten schnell, flexibel und vA auch sicher durchforstet werden können.

Ein klassisches Beispiel sind wohl Inkonsistenzen bei Adressen. Wohl auch, weil die meisten SAP Berater und Kollegen den Teil der SAP Welt auch gut kennen. Geschäftspartner werden fast überall verwendet. Um Adressen zu Geschäftspartnern zu analysieren muss man zuerst vom BP Stamm (BUT000) über den Adresslink (BUT020) zu den Adressen (ADRC) springen.

Also Tabelle – Excel – Selektionsschirm – Tabelle – Excel – Selektionsschirm – Tabelle. Schon ist man am Ziel. Aber dann kommt man drauf, dass es um Personen geht und dort auch das Feld PERSNR mitspielt. Also wieder alles von vorne…

Und jetzt kommt das SQL Cockpit ins Spiel. Hier kann ich mir die Tabellen alle gleichzeitig anschauen und verknüpfen. Da sehe ich das Problem dann auch einen Blick. Und was noch besser ist, einmal ausgeführt, bleibt die Abfrage in meiner Historie bestehen und ich kann sie jederzeit wieder ausführen. Beim ersten Problem bin ich mit dem SQL Cockpit vielleicht nur geringfügig schneller als „von Hand“, aber beim zweiten Mal spar ich schon 90% der Zeit. Und wenn es dann doch öfters auftritt, dann speichere ich diese Abfragen zusätzlich ab und stelle sie sogar meinen Kollegen zur Verfügung.

Am nächsten Tag einfach das Statement von gestern genommen:

und irgendwann nach dem 3,4 Mal (ok, bei mir wahrscheinlich nach dem 20. Mal – ich bewundere die Kollegen die so strukturiert sind) wird das ganze abgespeichert damit es auch die Kollegen nutzen können:

Ich nutze das SQL Cockpit seit 10 Jahren bei meinen Kunden. Und es ist aus meiner täglichen Arbeit nicht mehr weg zu denken. Manche Kunden nutzen es noch nicht, da muss ich dann auch immer über die SE16 arbeiten 🙁

Zählt doch mal, wie oft ihr täglich die SE16 nutzt. Wenn ihr in eurem Unternehmen auf weniger als 10 Abfragen pro Tag kommt (wohlgemerkt im gesamten Unternehmen, nicht pro User!), dann ist das SQL Cockpit für euch wahrscheinlich nicht geeignet. Sobald ihr mehr Abfragen macht, dann wird es sehr nützlich sein!.

LIKE & ESCAPE Feature in SQL Cockpit

LIKE & ESCAPE Feature in SQL Cockpit

Should wildcard characters be part of the search term? What should I do?

The solution is very easy in our SQL Cockpit, LIKE statement must be told that for example ‘%‘ is understood as a simple character instead of wildcard character. This is done by placing a special character in front of it and specifying this character as an „ESCAPE character“ at the end of command.

Example

User wants to select the table line(s) which in DOKTEXT field are containing the 100% word.

The database table contains the following entries.

Using the LIKE addition with the pattern will have the following result, because the percent sign represents zero, one, or multiple characters in SQL.

The first and last percent signs indicate that before and after the string any content is possible. The middle percent sign is connected with the escape character ‚\‘ and is therefore part of the search string. This specification ‚\%‘ is to be understood as a character, because of ESCAPE ‘\’ addition.

Links

https://help.sap.com/doc/abapdocu_740_index_htm/7.40/en-US/abenwhere_logexp_like.htm

https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abenwhere_logexp_like.htm

https://help.sap.com/viewer/4fe29514fd584807ac9f2a04f6754767/2.0.00/en-US/20fa17f375191014a4d8d8cbfddfe340.html?q=LIKE

Code Completion und Elementinfo im SQL Cockpit

Heute habe ich beim Testen ein für mich völlig unbekanntes Feature im SQL Cockpit entdeckt. Und das soll was heißen, bin ich doch einer der Entwickler hinter dem Tool und glaubte eigentlich alle Features zu kennen.

Jedenfalls gibt es im SQL Cockpit eine sogenannte Elementinfo. In dieser sieht man einfach die Struktur zu einer Datenbanktabelle oder einem CDS View. Die Elementinfo wird automatisch ermittelt, sobald man mit dem Cursor für knapp eine Sekunde auf einer Tabelle oder einem CDS View stehen bleibt. Man kann z.B. Felder per Drag & Drop aus der Elementinfo in den Query-Editor ziehen. Ein sehr, sehr hilfreiches Feature. Soweit so gut:

Dann hab ich heute beim Testen die implementierte Code Completion verwendet um nach speziellen Tabellen zu suchen. Und dabei ist mir nun aufgefallen, dass unsere Elementinfo auch ermittelt wird, wenn man im Code Completion Popup eine der vorgeschlagene Tabellen durchscrollt.

Zuerst war ich etwas überrascht aber nach näherer Betrachtung unserer Implementierung war es aber schnell klar. Ohne zu wissen, haben wir beim Einbau der Elementinfo auch auf Events der Code Completion reagiert. War so nicht direkt geplant, dafür um so erfreulicher.

Weitere Infos zur Elementinfo

  • Angezeigt werden folgende Spalteninformationen:
    • Keyflag
    • Feldname
    • Type/Länge
    • Datenelement
    • Kurzbeschreibung
  • Die Auslieferungsklasse von Datenbanktabellen wird angezeigt
  • Navigationsmöglichkeit zum Datenelement
  • Mehrfachauswahl von Spalten für gemeinsames Drag & Drop / Doppelklick möglich
  • Anzeige von Datenbanktabellen oder CDS Views
Benennen der Ergebnisliste

Benennen der Ergebnisliste


Notice: A non well formed numeric value encountered in /srv/www/j/jfoessleitner/cadaxo.com/wordpress/wp-includes/media.php on line 3236

Notice: A non well formed numeric value encountered in /srv/www/j/jfoessleitner/cadaxo.com/wordpress/wp-includes/media.php on line 3236

Wenn man im SQL Cockpit viele Listen gleichzeitig darstellen muss, kann man schon mal die Übersicht verlieren. Deshalb haben wir bereits vor einigen Releases die Möglichkeit zum Benennen der Ergebnislisten ergänzt.

Mit dem Kürzel *&%HEADER <name der liste> direkt vor einer SQL Abfrage, wird der Text <name der liste> als Überschrift in der Ergebnisliste verwendet.

SQL Cockpit_Releaseinfos

Cadaxo SQL Cockpit 3.7 – Releaseinfos

Die SQL Cockpit Version 3.7 ist fertig und bietet wieder ein paar Korrekturen/Verbesserungen und einige interessante neue Features. Nachfolgend ein Überblick über die wichtigsten Neuerungen.

Tabs Layout

Bisher konnten mehrere Listen in folgenden drei Layouts dargestellt werden: Vertikal, Horizontal oder Matrix. Mit diesem Release haben wir die neue Layout-Variante Tabs ergänzt. Dadurch wird immer nur eine Ergebnisliste dargestellt und nutzt somit den gesamten Ergebnisbereich. Im Header-Bereich der Listen kann zwischen den Ergebnislisten hin- und hergeschalten werden.

Domain Text

Die Beschreibungstexte von Domänen-Festwerten können nun in die Liste automatisch mit aufgenommen werden. Für Spalte mit einer Domäne wird eine zweite Spalte mit gleicher Überschrift erzeugt in welcher der Beschreibungstext des Festwerts enthalten ist. Dieses Feature ist vorerst nur verfügbar, wenn der strikte ABAP SQL Modus verwendet wird. (strikter Modus: Select Felder mit Beistrich getrennt, … )

Listenvergleich

Im Bereich des Listenvergleichs haben wir eine zweite Darstellungsform des Ergebnisses eines Vergleich aufgenommen. Bisher wurden die Spalten der beiden Listen nebeneinander dargestellt. Durch die neue Darstellung werden die Spalten nun untereinander dargestellt.

Darstellung nebeneinander Darstellung untereinander

CSV Export

Beim CSV Export von Ergebnislisten erscheint nun vor dem Export ein Popup in dem folgende Einstellungen vorgenommen werden:

Report Template Erweitert – Gruppierung von Selektionsparametern

Im Wizard zur Generierung eines Reports mit dem erweiterten Template, kann die neue Funktion Tabellen-Auswahlblöcke markiert werden. Im generierten Report werden dann die Selektionsfelder nach ihrer Tabellenzugehörigkeit in eigene Selektionsblöcke gruppiert.

 

Ausblick 4.0

Nach dem Release ist vor dem Release. Im nächsten SQL Cockpit Release werden wir nun die länger geplanten tiefgreifendern Erweiterungen vornehmen um alle ABAP SQL Select Operationen (CTE, … ) eines S/4 HANA Systems zu unterstützen! 

Wir rechnen damit, dass das SQL Cockpit 4.0 im 3. Quartal 2022 erscheinen wird. 

 

Webinar – ABAP® 7.50 Releaseabhängige Änderungen

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „ABAP 7.50 Releaseabhängige Änderungen

Bücher:

Nützliche Links

Horst Keller Blogs:

Unsere nächsten Webinare

Bild

Backstage!

Cadaxo SQL Cockpit 3.1

Das Sommer-Release des Cadaxo SQL Cockpits ist da! Bei der neuen 3.1 Version wurde der Fokus ganz klar auf Bug-Fixing gelegt, um den komplett neuen Parser, der alle neuen Open SQL Features am ABAP 7.40 unterstützt, noch stabiler zu machen.

Der Report Generator wurden ebenfalls auf Vordermann gebracht. Es können nun alle SQL Statements, die die neue Open SQL Syntax enthalten oder Zugriff auf CDS Views bieten, auf Knopfdruck in ein gewöhnlichen ABAP Report übernommen werden.

 

 

Neue Features

 

Auch diese neuen Features sind Bestandteil des brandneuen Cockpit Releases 3.1

 

Element Info

Die Element Info sorgt für eine noch bessere Usability im SQL Cockpit und lässt Sie noch schneller Ihre SQL Statements gestalten. Sie können sich nun alle notwendigen Informationen zu einer DB-Tabelle anzeigen lassen, indem Sie nur mit dem Mauszeiger über den Tabellen-Namen fahren.

Sie sehen alle wichtigen Informationen, wie Spaltennamen und die dazugehörige Beschreibung auf einen Blick. Mit Doppelklick oder Drag&Drop können Sie die Spaltennamen einfach in den Editor-Bereich des SQL Cockpits übernehmen uns sparen so wertvolle Zeit, indem Sie nicht selbt die Spaltennamen suchen und eintippen müssen.

Dieses kurze Video zeigt das neue Feature auf einen Blick: Element Info Video

 

Vergleichen von Ergebnislisten

Ab sofort können nun nicht nur gleiche Ergebnislisten miteinander verglichen werden, sondern auch Listen, die nicht den komplett gleichen Aufbau haben. Es müssen lediglich die Schlüsselfelder übereinstimmen. Alle namensgleichen Spalten werden gegenübergestellt und die Differenzen aufbereitet dargestellt.

Dabei können auch gespeicherte Listen, die einen unaktuellen Datenbestand zeigen, mit aktuell ausgewerteten Ergebnislisten verglichen werden.

Das Vergleichstool des SQL Cockpits bietet zudem eine komfortable Oberfläche mit vielen Funktionen, um die Differenzen des Vergleichs besser auswerten zu können.

 

 

Cadaxo SQL Cockpit Funktionen auf einem Blick

Mit den folgenden Informationen und Video-Tutorials können auch Sie von den Vorteilen des SQL Cockpits profitieren.

 

Cockpit Überblick

Sie wollen keine Zeit verschwenden und sofort mit Ihren Auswertungen losstarten? Nehmen Sie sich einen Augenblick Zeit und sehen Sie mit diesem Video alle wichtigsten Funktionen des Cockpits auf einem Blick. Nutzen Sie das volle Potential des Cockpits, um schnell zu Ihren Daten zu kommen.
 
 
SQL

Unendliche Möglichkeiten beim Auswerten mit den SQL Cockpit. Durch Ausführen mehrerer SELECTs gleichzeitig, lassen sich auch die komplexesten Datenkonstellationen auf einem Blick auswerten. Hier ein kurzes Video!
 
 
Varianten

Mit den SQL Cockpit Varianten können Sie nicht nur ihre SELECT-Statements speichern, sondern auch mit anderen teilen. Hier ein kurzes HowTo-Tutorial.
 
 
Symbole

Verfeinern Sie ihre SQL Statements und sparen Sie Zeit mit Hilfe von Symbolen. Neben eigenen Variablen, die Sie selbst definieren und in Ihrem SELECT-Statement verwenden können, lassen sich auch Systemsymbole verwenden. Verschaffen Sie sich hier einen Überblick.
 
 
Historie

Sie wollen ein SELECT-Statement, dass Sie vor einer Woche abgesetzt haben, nochmal ausführen, haben jedoch vergessen es zu speichern? Kein Problem – im SQL Cockpit sehen Sie alle Ihre abgesetzten Statements und können es immer wieder ausführen. Hier sehen Sie wie!
 
 
Batch

Langläufer? Kein Problem – Jede Abfrage lässt sich auch als ein Hintergrund-Job definieren. Komfortabel erstellen Sie in Sekunden einen richtigen Batch-Job und müssen sich anschließend nicht durch die Spool-Aufträge quälen, sondern können bequem das Erlebnis im SQL Cockpit anschauen. Hier zum Video!
 
 
Trace

Falls Sie Ihre SQL Statements analysieren und optimieren möchten, steht bei jedem ausgeführten Statement auch die Laufzeit. Wenn Ihnen das nicht reicht, können Sie noch den SQL-Trace einschalten, um Ihre Statements zu analysieren. Hier sehen Sie wie.
 
 
Report Generator

Das Cockpit hat für jeden was. Auch Endanwender bzw. Benutzer ohne Open SQL Kenntnisse können vom Cockpit profitieren. Mit einem Mausklick lassen sich alle Datenabfragen als ein ABAP Report generieren. Durch Klicken auf den Template-Button (Zauberstab) öffnet sich ein Wizard, mit dem Sie den Report so bauen können, dass alle Anforderungen erfüllt sind. Vorgefertigtes Coding, selbst für komplexere Anforderungen, wie z.B. ALV Ereignishandler usw.

 

SQL Cockpit 3.0 Features

Das langerwartete Cadaxo SQL Cockpit 3.0 ist jetzt da! Ein komplett neuer Parser, mit dem sich vollkommen neue Möglichkeiten bei der Gestaltung der SQL Statements ergeben, schmückt die neuste Cockpit Version.

Hier eine Auflistung der Cockpit 3.0 Neuerungen:

  • Unterstützung neuer Open SQL Funktionen
  • Anzeige und Zugriff von CDS Views
  • Generische Spaltenangaben mit dbalias~*
  • Auto-Vervollständigung (Code-Completion)
  • Unterstützung der Cockpit Symbole im kompletten Select-Statement

 

Unterstützung neuer Open SQL Funktionen

Seit SAP ABAP 7.40, SP8 gibt es nun, nach langem Warten, folgende neuen Open SQL Funktionen:

  • Verwenden von Festwerten
  • Arithmetische Kalkulationen (+,-,*,/)
  • Arithmetische Funktionen (ABS, CEIL, FLOOR, DIV, MOD)
  • Verketten von Zeichenketten mit &&
  • Typanpassung mit CAST (momentan nur von DEC zu FLTP)
  • COALESCE Funktion
  • Fallunterscheidung mit CASE

„Das soll NEU sein??“, werden sich nun einige von euch fragen. Die Antwort ist „JA“. Während in anderen Datenbanksprachen Funktionen, wie CASE, UNION und CAST, im Basisrepertoire inbegriffen sind und seit je her unterstützt werden, war das bei Open SQL bisher nicht der Fall. Schon seit den Anfängen von SAP kannte Open SQL nur eine sehr abgespeckte Version der kompletten SQL Syntax und wurde bisher auch kaum erweitert.

Erst als die SAP eigene Datenbank SAP HANA etabliert war, mit ihr die Strategie „Code Push Down“ geschaffen wurde, hat sich bei Open SQL auch einiges getan. Ab ABAP Release 7.40, Servicepaket 8, stehen neue SQL Funktionen zur Verfügung.

 

Das folgende Beispiel zeigt ein SQL Statement mit folgenden neuen SQL Funktionen:

Fallunterscheidung mit CASE, Verketten von Zeichenketten mit &&, COALESCE Funktion

Ergebnis:

bsp1

 

Für eine detaillierte Übersicht der neuen Open SQL Features, mit einiges Praxisbeispielen, hier klicken: http://www.cadaxo.com/?p=4555

 

 

Anzeige und Zugriff von CDS Views

Als weiteres Feature in der neuen Cockpit 3.0 Version, das unbedingt erwähnt werden sollte, ist die Unterstützung von CDS Views.

CDS Views sind relativ neu und deswegen noch nicht weit verbreitet. Ich bin mir jedoch sicher, dass sie, in einiger Zeit, in aller Munde sein werden. Da die bisherigen Views in SAP sehr eingeschränkt sind, hat man jetzt bei den CDS Views sogar mehr Möglichkeiten als mit den neuen Open SQL Funktionen.

Hier sind nämlich noch neben den ganzen neuen Open SQL Features, solche Funktionen, wie UNION, UNION ALL, Assoziationen und Annotationen, möglich.

Also noch mächtigere Möglichkeiten eine View zu bauen. Das bedeutet auch Entlastung des Anwendungsservers, indem Daten-Intensive Logik in die View und somit auf die Datenbank ausgelagert wird. Im besten Fall ist im Report nur noch ein simples Select-Statement auf die CDS View, ohne komplizierte WHERE-Bedingungen, notwendig.

Hier ein Beispiel einer CDS View:

cds2

 

Die Anlage und Pflege der CDS Views ist nur mit ADT (ABAP Development Tools) im Eclipse möglich. Jedoch bietet Cockpit 3.0 nun die einzige Möglichkeit im SAP GUI, sich die View Definition direkt anzeigen zu lassen.

Mit Doppelklick auf den Namen der CDS View öffnet sich ein Popup mit Informationen zur View und dem DDL Coding.

cds_dll

 

Mittels Open SQL kann man direkt im Cockpit Editor das Select-Statement ausführen und sieht die Ergebnisliste.

cds_editor

 

 

Generische Spaltenangaben mit dbalias~*

Die Spaltenangabe kann bei JOIN Abfragen nun generisch mit dbalias~* vorgenommen werden.

 gen_spalten

 

Code Completion

Als weiteres Feature der Cockpit 3.0 Version, das erheblich zur Usability des Cockpits beiträgt und jeden Anwender das Schreiben der SQL Statements erheblich erleichtert, ist die Auto-Vervollständigung.

Es wurde die Standard Code-Completion des SAP Editors verwendet. Das Aktivieren erfolgt mit STRG+SPACE

 code_comp

 

Symbole

Bisher war bei Symbolen die Einschränkung gegeben, dass sie nur in der WHERE-Bedingung verwendet werden dürfen. Nun werden sie im kompletten Select-Statement unterstützt.

symbole

 

OpenSQL 1×1

OpenSQL ist eine Datenbanksprache mit der man bestimmte Operationen auf der Datenbank durchführen kann. Es stammt von der Firma SAP und wurde von der älteren Datenbanksprache SQL abgeleitet.

SQL, Abkürzung für „Structured Query Language“, wurde von Edgar Codd (IBM), Donald Chamberlin und Raymond Boyce, in den 1970er entworfen.

Es ist eine Sprache zum Abfragen und Bearbeiten von Datenbeständen in relationalen Datenbanken und zur Definition neuer Datenstrukturen.

Es gibt drei Kategorien von SQL Befehlen:

  • DML – Data Manipulation Language
    • Einfügen, Ändern, Löschen und lesender Zugriff
  • DDL – Data Definition Language
    • Definition neuer Datenbankstrukturen (Schemas, Tabellen usw.)
  • DCL – Data Control Language
    • Zur Rechteverwaltung und Transaktionskontrolle

In SAP bildet das ABAP Dictionary die DDL- und DCL-Befehle ab. Open SQL beinhaltet die DML Befehle. Wobei hier noch zu erwähnen ist, dass es nur aus einer Untermenge der Schlüsselwörter des Standard-SQL besteht. Nachfolgend eine Auflistung der Open SQL Schlüsselwörter, die verwendbar sind:

Schlüsselwort Funktion
SELECT Daten aus Datenbanktabellen lesen
INSERT Neue Zeilen in Datenbanktabellen einfügen
UPDATE Zeileninhalte in Datenbanktabellen ändern
MODIFY Neue Zeilen in Datenbanktabellen einfügen oder bestehende Zeileninhalte ändern
DELETE Zeilen aus Datenbanktabellen löschen
OPEN CURSOR,
FETCH,
CLOSE CURSOR
Zeilen von Datenbanktabellen über den Cursor lesen

Bevor wir uns den einzelnen Schlüsselwörtern widmen und diese näher erläutern, trägt der folgende Absatz noch zum besseren Verständnis vom Open SQL und seiner Verwendung in SAP, bei.

Ein SAP System ist ein drei Schichten System, bestehend aus UI, Applikationsserver und einer Datenbank. Die Datenbank kann von unterschiedlichen Datenbankenherstellern, wie MaxDB, DB2, Oracle, MSSQL, usw., verwendet werden. (Hier eine vollständige Auflistung der von der SAP unterstützten Datenbanken: http://help.sap.com/saphelp_nw73/helpdata/de/84/0cb892edfbc34290c1685132006662/content.htm)

Da jede von diesen Datenbanken einen unterschiedlichen SQL-Dialekt besitzt, wurde Open SQL eingeführt.

Denn Open SQL ist eine portable und datenbank-unabhängige Sprache. D.h., von allen Programmen bzw. Entwicklungen, die am Anwendungsserver laufen und Open SQL verwenden, können deren Open SQL Befehle auf jeder beliebigen darunter liegenden Datenbank ausgeführt werden.

Genauer gesagt, setzt die ABAP Laufzeitumgebung die Open SQL Befehle in die entsprechende Native SQL Befehle um. Mit Native SQL bezeichnet man das erwähnte spezifische SQL Dialekt der darunter liegenden Datenbank.

Es ist natürlich auch erlaubt Native SQL im ABAP Programm zu verwenden. Dabei arbeitet man mit datenbankspezifischen SQL Anweisungen. Das erlaubt die Einbindung verschiedener Datenbanktabellen, die nicht vom ABAP Dictionary verwaltet werden. Die Einschränkung jedoch ist, dass solche Programme im Allgemeinen nicht auf verschiedenen Datenbanksystemen laufen können.

 

Widmen wir uns nun den oben erwähnten Open SQL Schlüsselwörtern zu:

Schlüsselwort Funktion
SELECT, ENDSELECT Daten aus Datenbanktabellen lesen
INSERT Neue Zeilen in Datenbanktabellen einfügen
UPDATE Zeileninhalte in Datenbanktabellen ändern
MODIFY Neue Zeilen in Datenbanktabellen einfügen oder bestehende Zeileninhalte ändern
DELETE Zeilen aus Datenbanktabellen löschen
OPEN CURSOR,

FETCH,

CLOSE CURSOR

Zeilen von Datenbanktabellen über den Cursor lesen

Wie schon erwähnt sind diese nur eine Untermenge der Standard-SQL Schlüsselwörter, jedoch auch mit einigen SAP-spezifischen Elementen, wie z.B. der Zusatz FOR ALL ENTRIES, angereichert.

Um Datenbestände abzufragen wird das Schlüsselwort SELECT, am häufigsten verwendet. Das Lesen über den Cursor (OPEN CURSOR, FETCH, CLOSE CURSOR) ist auch möglich, jedoch ziemlich selten benutzt. Der Unterschied ist, dass beim Lesen der Daten über einen Cursor, die INTO-Klausel von der SELECT-Anweisung entkoppelt werden kann. Mit OPEN CURSOR wird ein Cursor für die Select-Anweisung geöffnet und danach können die Zeilen der Selektion einzeln in einen flachen Zielbereich gestellt werden.

 

SELECT

Die SELECT-Anweisung wird zum Lesen von Daten aus Datenbanktabellen verwendet und ist in mehrere elementare Klauseln aufgeteilt:

SELECT result: result definiert die Struktur der zu lesenden Daten. Dabei können einzelne Spalten oder komplette Zeilen mit * angegeben werden.

INTO target: die INTO Klausel bestimmt den Arbeitsbereich innerhalb eines ABAP Programms indem die gelesenen Daten gestellt werden sollen.

FROM source: source gibt die Datenbanktabelle oder View an von der gelesen werden soll. Die FROM-Klausel kann auch vor die INTO-Klausel gestellt werden.

WHERE cond: In der WHERE-Klausel werden Bedingungen bestellt, welche Zeilen gelesen werden sollen.

GROUP BY fields: Hiermit werden Gruppen mehrerer Zeilen zu einzelnen Zeilen zusammengefasst. Eine Gruppe ist ein Satz von Zeilen, die in jeder Spalte auf der Liste fields die gleichen Werte enthalten.

HAVING cond: Mit dieser Klausel werden logischen Bedingungen auf die durch GROUP BY  kombinierten Zeilen gesetzt.

ORDER BY fields: Hiermit gibt man eine Sortierreihenfolge der zu lesenden Zeilen vor.

 

Bei fast jeder dieser Klauseln gibt es Zusätze, wie z.B. SINGLE oder DISTINCT beim SELECT-Statement, CORRESPONDING FIELDS OF TABLE bei der INTO-Klausel, auf die ich hier nicht näher eingehen werde. (bei Bedarf liefert die SAP Onlinedokumentation Hilfe mit weiteren Details und konkreten Beispielen)

 

Aggregatfunktionen

Auf einzelnen Spalten von Datenbanktabellen können Aggregatsfunktionen angewendet werden. Aggregate sind zusammengefasste Daten einzelner Spalten.

S1 steht für einzelne Spaltennamen. Der Ausdruck agg steht für eine der folgenden Aggregatsfunktionen:

MAX: liefert den Maximalwert der Spalte

MIN: liefert den Minimalwert der Spalte

SUM: liefert die Summer der Spalte

AVG: liefert den Durchschnittswert der Spalte

COUNT: zählt Werte oder Zeilen;

COUNT( DISTINCT s ) liefert die Anzahl unterschiedlicher Werte in der Spalte s. Mit DISTINCT werden doppelt vorkommende Werte aus der Berechnung ausgeschlossen.

COUNT( * ) liefert die gesamte Anzahl der Zeilen in der Ergenismenge

Der Zusatz AS kann ein Alias, ein alternativer Spaltenname a1, definiert werden.

Nachfolgend ein Beispiel einer Select-Anweisung mit einer Aggregatsfunktion:

Mit dieser Anweisung erhält man den Geschäftspartner mit der höchsten vergebenen Geschäftspartnernummer.

 

Inner Join und Outer Join

Joins geben die Möglichkeit die Datenmenge über mehrere Datenbanktabellen zu selektieren. Bei einem INNER JOIN erhält man nur die Sätze des Kreuzproduktes, zu denen in allen beteiligten Tabellen ein Eintrag existiert.

Bei einem LEFT [OUTER] JOIN werden dagegen aus der linken Tabelle der Join-Verknüpfung auch Sätze selektiert, selbst wenn kein Eintrag in der anderen Tabelle existiert.

Nachfolgend ein Beispiel eines INNER JOINS:

Als Ergebnis würde man einen Datensatz erhalten, wenn dieser in beiden Tabellen vorhanden ist.

Nachfolgend ein Beispiel eines LEFT [OUTER] JOINS:

Mit LEFT OUTER JOIN wird nicht wie beim INNER JOIN nur dann ein Wert zurückgegeben wenn sich die JOIN Bedingung in beiden Tabellen findet, sondern hier kann als Ergebnis auch nur der Inhalt von Tabelle 1 (in diesem Fall BUT000) geliefert werden.

UP TO x ROWS

Mit diesem Zusatz werden die Anzahl der zu liefernden Zeilen an die Datenbank übergeben.

GROUP BY
Nachfolgend ein Beispiel eines GROUP BY:

SUBQUERIES

Mit Subqueries lassen sich eigene SELECT-Anweisung als Bedingung in der WHERE- oder HAVING- Klausel verschachteln.

Hier ein Beispiel eines Sub-Selects:

 

FOR ALL ENTRIES

Mit diesem Befehl werden alle Partner die sich in der internen ABAP Tabelle lt_partnertab befinden selektiert.

Der OPEN-SQL Zusatz FOR ALL ENTRIES ist bekanntlich eine SAP-spezifische Erweiterung und als solche nicht auf den Datenbanksystemen bekannt. Der DB-Optimizer wandelt solche SELECTS in entsprechende SQL Kommandos der Datenbank um.

 

Der Optimizer

Jedes Datenbanksystem verfügt über einen Optimizer. Die Aufgabe des Optimizers ist es, den Ausführungsplan für ein SQL-Statement zu erstellen (z.B. festlegen, ob ein Index- oder Table Scan durchgeführt wird). Es gibt zwei Ausprägungen von Optimizern:

Rule-based

Ein Rule-Based Optimizer analysiert die Struktur einer SQL-Anweisung (hauptsächlich SELECT und die WHERE-Klausel ohne Werte) und den Index der Tabelle(n). Über einen Bewertungsmechanismus entscheidet der Optimizer welches Vorgehen er anwendet, um den Befehl auszuführen.

Cost-based

Ein Cost-Based Optimizer betrachtet zusätzlich einige Werte in der WHERE-Klausel und die Statistiken der Tabellen. Die Statistiken enthalten Low- und High Values der Felder oder sogar ein Histogramm, das die Verteilung der Daten in der Tabelle enthält. Der Cost-Based Optimizer nutzt mehr Informationen über die Tabellen und führt daher meistens zu einem schnelleren Zugriff. Ein Nachteil beim Cost-Based Optimizer ist, daß die Statistiken periodisch auf den neuesten Stand gebracht werden müssen.

 

Rückgabewerte

Ein OpenSQL Befehl liefert folgende Rückgabewerte:

sy-subrc
Konnte der Befehl erfolgreich abgesetzt werden so enthält sy-subrc immer den Wert 0, ansonsten ungleich 0.

sy-dbcnt
Der Inhalt dieses Systemfelds enhält den Wert der durch den Befehl bearbeiteten Zeilen.