11.1 datenbankzugriff 11.2 pufferung auf … · der abap-interpreter reicht den befehlsblock direkt...
TRANSCRIPT
Kapitel 11: Datenbankzugriff & Pufferung – 1Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kap. 11 Datenbankzugriff und Pufferung in SAP R/3
11.1 Datenbankzugriff11.2 Pufferung auf Anwendungsebene11.3 Workshop: ABAP-Programmierung in SAP R/3
– Open SQL – Native SQL
Kapitel 11: Datenbankzugriff & Pufferung – 2Objektverwaltung höherer Ordnung (OHO) – SS 2003
11.1 Datenbankzugriff in ERP-SystemenStandard-ERP-Software deckt zwar in den meisten Fällen einen sehr grossen Teil der benötigten betriebswirtschaftlichen Funktionalität ab, erfordert aber häufig zusätzliche unternehmensspezifische Erweiterungen (Eigenentwicklungen)
Die Hersteller von ERP-Systemen bauen für die Implementierung ihrer Anwendungslogik eine eigene Infrastruktur auf• Werkzeuge für die Datenmodellierung (siehe Kapitel 10)• Übersetzung von Anwendungsobjekten zu Datenbankobjekten (s. Kap. 10)• Entwicklungsumgebung, Compiler, Debuggingtools
– Eigene Programmiersprache, zumeist mit integriertem Datenbankzugriff (fourth generation language, 4GL)
– Eigene Bibliotheken• Laufzeitumgebung
Kapitel 11: Datenbankzugriff & Pufferung – 3Objektverwaltung höherer Ordnung (OHO) – SS 2003
Erweiterung von ERP Systemen
…
Betriebswirtschaftliche Anwendungslogik
„Standard“Betriebs-wirtschaftliche Anwendungs-logik
Client-GUI
DataDictionary
Datenbank-Abstraktion
Individuelle Erweiterungen
Client-GUI Client-GUI Client-GUI
Kapitel 11: Datenbankzugriff & Pufferung – 4Objektverwaltung höherer Ordnung (OHO) – SS 2003
Datenbankzugriff in SAP R/3Open SQL • SQL-Dialekt von SAP, Datenbank-unabhängig • Nutzt SAP-internes Data Dictionary (zur Auflösung von Views,
Überprüfung von Konsistenzbedingungen, etc.) und Tabellenpuffer(Zwischenspeichern von Datensätzen auf Anwendungsserver-Ebene)
Native SQL• SQL-Dialekt der unterliegenden Datenbank• Anfragen werden –an der DB-Schnittstelle vorbei– direkt an die
Datenbank weitergeleitet• Ohne Verwendung des SAP-internen Data Dictionarys
– Kein Zugriff auf Pool-Tabellen und Cluster-Tabellen,da die Semantik der Abbildung nicht verfügbar ist
– Nur Zugriff auf Anwendungsdaten möglich– Umgehung der anwendungsspezifischen betriebswirtschaftlichen
Konsistenzprüfungen
Kapitel 11: Datenbankzugriff & Pufferung – 5Objektverwaltung höherer Ordnung (OHO) – SS 2003
Rückblick: Dialog-Workprozess & DB-Schnittstelle
Shared Memory
Tabellen-puffer
DynPro-Interpreter
Dialog-Workprozess
Native SQL Open SQL
ABAP-InterpreterData
Dictionary
Datenbank-Schnittstelle
Kapitel 11: Datenbankzugriff & Pufferung – 6Objektverwaltung höherer Ordnung (OHO) – SS 2003
DB-Zugriff mit Open SQL ...
Abbildungsregeln,Constraints, …
Data Dictionary
BEGIN… SELECT ……
END
Programm-Puffer ABAP-Interpreter
Datenbank-schnittstelle
Optimierung- &Zugriffsmodul
TabelleKNA1
5
SELECT …1 2
Tabellen-Puffer
3
4NativeSQL
6
TabelleKNA1
7
Shared Memory Dialog-Workprozess DBMS
Kapitel 11: Datenbankzugriff & Pufferung – 7Objektverwaltung höherer Ordnung (OHO) – SS 2003
… DB-Zugriff mit Open SQL1. Der ABAP-Interpreter des Workprozesses liest ein
Open SQL-Statement eines ABAP-Programms2. Der ABAP-Prozessor reicht das Open SQL-Statement an die
Datenbank-Schnittstelle weiter3. Falls die Daten nicht im Puffer sind, generiert die Datenbank-
Schnittstelle den entsprechenden Native SQL-Befehl.Ansonsten wird das Datum aus dem Puffer gelesen (Schritt 6)
4. Die Datenbank-Schnittstelle reicht den Native SQL-Befehl an dasDBMS weiter
5. Das DBMS liefert Daten zurück6. Die Datenbank-Schnittstelle gibt die Daten an den ABAP-Interpreter7. Bei Pufferung werden die gelesenen Daten in den Puffer geschrieben
Kapitel 11: Datenbankzugriff & Pufferung – 8Objektverwaltung höherer Ordnung (OHO) – SS 2003
Übersetzung von Open SQL nach Native SQL ...
ABAP-Interpreter
Datenbank-schnittstelle Zugriffsmodul
Open SQL-Query
Variablen vonQuery trennen
1
Optimierungsmodul
Native SQL-Querymit Binding Variable
3
Ausführungsplanmit Binding Variable
4
Query-Puffer5Ausführungsplan
mit Binding Variable
Query mit Binding-Variable in Native SQLübersetzen
2
Wert zurBinding Variable
2
6
77
7
7
Erste Ausführungder Query
WiederholteAusführungder Query
Dialog-Workprozess DBMS
Kapitel 11: Datenbankzugriff & Pufferung – 9Objektverwaltung höherer Ordnung (OHO) – SS 2003
… Übersetzung Open SQL nach Native SQL1. Der ABAP-Interpreter übergibt die Open SQL-Anweisung der
Datenbankschnittstelle 2. Die Datenbank-Schnittstelle ersetzt im Selektionsprädikat die aktuellen
Werte durch Binding-Variablen3. Übersetzung des Open SQL-Statements mit Binding-Variablen
in Native SQL4. Das DBMS erstellt einen Ausführungsplan
(für Querytyp wegen der Binding-Variablen) 5. Der Ausführungsplan wird im DBMS gepuffert 6. Zur Ausführung der Anfrage werden die Binding-Variablen durch
anfragespezifische Werte ersetzt7. Bei erneuter Anfrage kann auf den gepufferten Plan zurückgegriffen
werden (nur neues Füllen der Binding-Variablen nötig)
Kapitel 11: Datenbankzugriff & Pufferung – 10Objektverwaltung höherer Ordnung (OHO) – SS 2003
DB-Zugriff mit Native SQL ...
BEGIN… EXEC SQL
…ENDEXEC…
END
Programm-Puffer ABAP-Interpreter
Datenbank-schnittstelle
Optimierungs- &Zugriffsmodul
TabelleKNA1
3EXEC SQL…
ENDEXEC
1
2
Tabellen-Puffer
Abbildungsregeln,Constraints, …
Data Dictionary
Shared Memory Dialog-Workprozess DBMS
Kapitel 11: Datenbankzugriff & Pufferung – 11Objektverwaltung höherer Ordnung (OHO) – SS 2003
… DB-Zugriff mit Native SQL1. Der ABAP-Interpreter liest den EXEC SQL-Block eines
ABAP-Programms2. Der ABAP-Interpreter reicht den Befehlsblock direkt an das
DBMS weiter, ohne das SAP Data Dictionary zu konsultieren3. Das DBMS optimiert den Befehlsblock, generiert einen
Ausführungsplan, führt die Anfrage aus und gibt das Ergebnis an den aufrufenden ABAP-Interpreter zurück
Kapitel 11: Datenbankzugriff & Pufferung – 12Objektverwaltung höherer Ordnung (OHO) – SS 2003
11.2 Pufferung auf AnwendungsebeneDie Übersetzung von Anwendungsobjekten in das Datenmodell der Datenbank ist zumeist recht aufwändig• Indirektion über das Data Dictionary• Anwendungsobjekte müssen unter Umständen erst
„zusammengebaut“ werden, z.B. durch Joins in der Datenbank oder durch das Zusammenführen von Datensätzen auf Anwendungsebene
Der Zugriff auf die Datenbank ist in der Regel über eine Netzwerkverbindung realisiert• Dadurch höhere Zugriffszeit als auf lokale Daten
Abhilfe: Puffer für Anwendungsobjekte innerhalb vonERP-Systemen• Anwendungspuffer oberhalb des Datenbankpuffers• Caching von Anwendungsobjekten, nicht von Datenbankobjekten
Kapitel 11: Datenbankzugriff & Pufferung – 13Objektverwaltung höherer Ordnung (OHO) – SS 2003
Pufferung in ERP Systemen
…
Betriebswirtschaftliche Anwendungslogik
„Standard“Betriebs-wirtschaftliche Anwendungs-logik
Client-GUI
DataDictionary
Datenbank-Abstraktion
IndividuelleErwei-
terungenPuffer für
Anwendungs-objekte
Client-GUI Client-GUI Client-GUI
Kapitel 11: Datenbankzugriff & Pufferung – 14Objektverwaltung höherer Ordnung (OHO) – SS 2003
SAP R/3: Datenpufferung im Applikationsserver
Effizienter Zugriff auf Daten durch ZwischenpufferungClient Caching (aus der Sicht der DB) • Ein Tabellenpuffer pro Applikationsserver• Physisch im gemeinsamen Hauptspeicher platziert
Zugriff auf Cache nur für Open SQL möglich• Tabellenpuffer wird automatisch verwendet.
Ausnahme: explizite Umgehung mittels
SELECT� SINGLE� ...BYPASSING� BUFFER
• Native SQL greift immer direkt auf die Datenbank zu
Kapitel 11: Datenbankzugriff & Pufferung – 15Objektverwaltung höherer Ordnung (OHO) – SS 2003
PufferungsstrategienPufferungsstrategie im Data Dictionary für jede Tabelle individuell definiert (nur bei transparenten Tabellen & Pool-Tabellen)• Siehe “technische Angaben” im Data Dictionary, Übung 7
Pufferungsarten• Vollständig
– Komplette Tabelle im Tabellenpuffer• Generisch
– Pufferung nach Präfix des Primärschlüssels– Meist ist dies die Mandantennummer, dadurch werden nur
“relevante” Daten gepuffert• Einzeln
– Nur einzelne Tupel im Puffer
Kapitel 11: Datenbankzugriff & Pufferung – 16Objektverwaltung höherer Ordnung (OHO) – SS 2003
Verschiedene Arten der Tabellenpufferung
KtoNr Name Vorname01 Leuenberger Moritz 01 Metzler Ruth02 Blocher Christoph01 Schmid Samuel03 Maurer Esther03 Ledergerber Elmar02 Schmid Samuel04 Hingis Martina
Tabelle Kontovollmacht in der Datenbank
KtoNr Name
Schlüssel der Tabelle Kontovollmacht
Generischer Schlüssel
ABAP-Interpreter… SELECT *FROM KontovollmachtWHERE KtoNr = 01AND Name = ‘Leuenberger’…
Dialog-Workprozess Shared Memory
Tabellen-Puffer
KtoNr Name Vorname01 Leuenberger Moritz
Datenbankschnittstelle
KtoNr Name Vorname01 Leuenberger Moritz 01 Metzler Ruth02 Blocher Christoph01 Schmid Samuel03 Maurer Esther03 Ledergerber Elmar02 Schmid Samuel04 Hingis Martina
Vollständige PufferungKtoNr Name Vorname01 Leuenberger Moritz 01 Metzler Ruth01 Schmid Samuel
Generische Pufferung
KtoNr Name Vorname01 Leuenberger Moritz
Einzelsatz-Pufferung
Kapitel 11: Datenbankzugriff & Pufferung – 17Objektverwaltung höherer Ordnung (OHO) – SS 2003
Puffer-SynchronisationDatenänderungen durch alle Workprozesse, die zu einem Applikationsserver gehören, werden synchron in den Puffer und in die DB geschrieben Aber: bei mehreren Applikationsservern gibt es auch mehrere Tabellenpuffer!Bei Datenänderungen werden die Puffer aller Applikationsserver NICHT synchron aktualisiert • Hierfür gibt es periodische Updates im System (ca. alle 1-2 min);
während dieser Zeit sind die Puffer inkonsistent !Daher:• Pufferung nur von Tabellen, die nicht häufig geändert werden
(z.B. Stammdaten-Tabellen)• Für alle anderen Tabellen ist im Data Dictionary die Pufferung
auszuschalten!
Kapitel 11: Datenbankzugriff & Pufferung – 18Objektverwaltung höherer Ordnung (OHO) – SS 2003
11.3. ABAP-Programmierung mit Open- und Native SQL
ABAP – ÜbersichtDatenbankzugriff aus ABAP-Programmen• Open SQL• Native SQL
Vorbereitung der praktischen Übung (Ü8) mit SAP R/3 (Teil II)
Kapitel 11: Datenbankzugriff & Pufferung – 19Objektverwaltung höherer Ordnung (OHO) – SS 2003
ABAP - Die Programmiersprache von SAPUrsprung im R/2-System: Allgemeiner Berichts-Aufbereitungs-Prozessor• Für Reporting-Zwecke
Ständige Erweiterung der Sprache im R/3-SystemAdvanced Business Application Programming Language• Alle betriebswirtschaftlichen Anwendungen in ABAP implementiert• Nur kleiner Systemkern in C• Früher hiess die Sprache ABAP/4 um zu symbolisieren, dass es sich
um eine 4GL-Sprache handelt• Neuerdings: nur noch ABAP bzw. ABAP Objects, um Entwicklung in
Richtung Objektorientierung zu betonen
Kapitel 11: Datenbankzugriff & Pufferung – 20Objektverwaltung höherer Ordnung (OHO) – SS 2003
Charakteristik von ABAPAbarbeitung von ABAP-Programmen:• ABAP-Sourcen werden kompiliert in Bytecode (“Generieren”)• Bytecode wird interpretiert• Programmsourcen und Bytecode werden in der Datenbank verwaltet
– Dies beinhaltet auch Abhängigkeiten zu anderen Schemaobjekten • Bei Bedarf erfolgt Neugenerierung vor Interpretation des Bytecodes
– Wenn z.B. bei Überprüfung der Abhängigkeiten festgestellt wird, dass ein benötigtes Objekt in einer neueren Version vorliegt
Release 4.5x: über 250 Schlüsselwörter, Tendenz steigend!Sehr schwach ausgeprägte Orthogonalität
Kapitel 11: Datenbankzugriff & Pufferung – 21Objektverwaltung höherer Ordnung (OHO) – SS 2003
Tools des R/3 RepositoryData Modeler• Datenmodellierung
Data Dictionary• Metadatenverwaltung
Data Browser• Zugriff auf Datenbanktabellen (nur Anwendungsdaten)
Object Navigator• Zugriff auf sämtliche Programmobjekte
Entwicklungswerkzeuge• ABAP-Editor• Screen Painter• Menu Painter (Definition von Buttons & Menüeinträgen)
Kapitel 11: Datenbankzugriff & Pufferung – 22Objektverwaltung höherer Ordnung (OHO) – SS 2003
EntwicklungsumgebungABAP-Editor• Ist selbst ein ABAP-Programm, die Oberfläche des
Editors ist also ein Dynpro• Etwas gewöhnungsbedürftige Oberfläche• Sehr gute Integration in die komplette Entwicklungsumgebung
(SAP Repository, andere Tools)– Doppelklick auf Name eines Schemaobjektes öffnet das
entsprechende Tool (z.B. Data Dictionary für Tabellen)– Hilfe zu ABAP-Befehlen (Schlüsselworte) mittels F1
• Integration von – Syntaxüberprüfungen (Programm Prüfen Syntax)– Bytecode-Erzeugung (Programm Generieren)
Dokumentation: http://sapr4.ethz.ch
Kapitel 11: Datenbankzugriff & Pufferung – 23Objektverwaltung höherer Ordnung (OHO) – SS 2003
ProgrammtypenAusführbares Programm (Typ 1)• Für Reports • Nur Programme von diesem Typ können direkt abgearbeitet werden
Modulpool (Typ M)• Für Dialoganwendungen (Verarbeitungsschritte von DynPros)• Nur über Transaktionsnummer aufrufbar
Funktionsgruppe(Typ F)• Sammlung von Funktionen
Include-Programm (Typ I)Subroutinepool (Typ S)Klassen und Interfacedefinition (Typ K,J)
Kapitel 11: Datenbankzugriff & Pufferung – 24Objektverwaltung höherer Ordnung (OHO) – SS 2003
Aufbau von ABAP-Anweisungen
Wie so viele Sprachen besitzt ABAP den,Anspruch der natürlichen Sprache zu ähneln.
In ABAP bedeutet dies konkret dass jede,Anweisung mit einem Punkt beendet werden,muss (eine Anweisung heisst daher Satz).Wenn ein Satz,aus mehreren Teilen besteht dann muss jeder,dieser Teile mit einem Komma abgetrennt,werden.
Ein: Doppelpunkt besagt dass,Schlüsselwort für mehrere Parameter gilt.
Kapitel 11: Datenbankzugriff & Pufferung – 25Objektverwaltung höherer Ordnung (OHO) – SS 2003
Grobstruktur von ReportsREPORT� Zreportname.*� Ein� Stern� als� erstes� Zeichen� markiert*� eine� KommentarzeileTYPES:� � ...� � � . “� alles� folgende� gilt� auchDATA:� � � ...� � � . “� als� KommentarTABLES:� ...� � � .PARAMETERS:� ...� .Anweisungen .Perform Unterprogramm USING� Parameterliste.Anweisungen .
FORM� Unterprogramm USING� Parameterliste.Anweisungen .
ENDFORM.
Kapitel 11: Datenbankzugriff & Pufferung – 26Objektverwaltung höherer Ordnung (OHO) – SS 2003
ABAP: Datendefinition …DatendefinitionDATA:� feldname TYPE� datentyp .DATA:� feldname(länge)� TYPE� datentyp
[� VALUE� ‘value’]� .
ABAP-Datentypen:C TextN Numerischer TextT ZeitangabeD DatumF GleitpunktzahlI Ganze ZahlP Gepackte Zahl (für Festkomma)X Hexadezimalzahl
Kapitel 11: Datenbankzugriff & Pufferung – 27Objektverwaltung höherer Ordnung (OHO) – SS 2003
… ABAP: DatendefinitionLike-Operator: Typ von Objekten wird aus dem Data Dictionaryübernommenz.B. Variable saldo soll den Typ des Attributs kontostand der Tabelle ZOHO00KON besitzenDATA: saldo LIKE� zoho00kon-kontostand .
Ohne Like-Operator darf nur ABAP-Datentyp gewählt werden, der den “externen” Datentyp aufnimmt(ABAP-Datentypen und Datentypen des Dictionarys bzw. der unterliegenden Datenbank sind nicht vollständig kompatibel)
z.B. C(n) für CHAR nP((n+2)/2) DECIMALS m für CURR n, m…
Kapitel 11: Datenbankzugriff & Pufferung – 28Objektverwaltung höherer Ordnung (OHO) – SS 2003
(einige) ABAP-SprachelementeBildschirmausgabe
WRITE� ‘Hello� world’.
WRITE:� /� ‘Hello’,� ‘world’.� “� / Startet� Ausgabe� inneuer� Zeile
Zuweisungen field =� expression.� � � (mit impliziter Typumwandlung)MOVE� A TO� B.� “� Für� die� Freunde� von� Assembler
MOVE-CORRESPONDING� A TO� B.� “� Zuweisungen� der� Inhalte� von“� Elementen� gleichen� Namens“� zwischen� zwei� Strukturen“� z.B.� SAP-Tabellen
Kapitel 11: Datenbankzugriff & Pufferung – 29Objektverwaltung höherer Ordnung (OHO) – SS 2003
TabellendeklarationTabellen, die im Data Dictionary definiert (und die aktiviert) sind, müssen bei Verwendung in ABAP-Programmen explizit deklariert werdenTABLES:� � ZOHO00KUN,� ZOHO00KTO .
Zugriff auf Tabellenelemente:WRITE:� � ‘Kundenname:� ‘,� ZOHO00KUN-name1 .
mysaldo =� ZOHO00KTO-kontostand .�
Kapitel 11: Datenbankzugriff & Pufferung – 30Objektverwaltung höherer Ordnung (OHO) – SS 2003
„Objektorientierung“: ABAP Objects ...SAP R/3 unterstützt ab Version 4.5 objektorientierte Aspekte• Programmlokale Klassen (anstelle von Unterprogrammen)• Globale, systemweit verfügbare Klassen (Class Builder)
CLASS� myaccount DEFINITIONPUBLIC� SECTION.
METHODS:withdraw
IMPORTING� amount VALUE TYPE� F,deposit
IMPORTING� amount VALUE TYPE� F,�get_balance
EXPORTING� VALUE TYPE� F....
PRIVATE� SECTION.DATA: account_number� TYPE� C(8),
balance TYPE� F(8,2)� VALUE� 0.ENDCLASS.
Kapitel 11: Datenbankzugriff & Pufferung – 31Objektverwaltung höherer Ordnung (OHO) – SS 2003
... „Objektorientierung“: ABAP ObjectsCLASS� myaccount IMPLEMENTATION
METHOD� withdraw� ....
ENDMETHOD....�
ENDCLASS.
Instanziierung und MethodenaufrufDATA: account-object TYPE� REF� TO� myaccount ,
withdraw_value TYPE� F(8,2)� .
withdraw_value =� 100.CREATE� OBJECT� account-object .CALL� METHOD� account-object->withdraw
EXPORTING amount� =� withdraw_value....
Kapitel 11: Datenbankzugriff & Pufferung – 32Objektverwaltung höherer Ordnung (OHO) – SS 2003
Open-SQL (Syntax von Select-Statements) …SELECT [SINGLE “� Selektiert� nur� einzelnen� Satz
[FOR� UPDATE]� ]� “� Setzt� gleich� Sperre
|� [DISTINCT]feldliste,� aggregatfunktion
[INTO [feld |� (feldliste)]� |[[CORRESPONDING� FIELDS� OF]� work_area]|[[CORRESPONDING� FIELDS� OF]� TABLE� itab]� ]� |
[APPENDING� “� Ergebnis� wird� an� interne� Tabelle� angehängt
[CORRESPONDING� FIELDS� OF]� TABLE� itab]
FROM table |� (table_name)�|� tab AS� t1 JOIN� tab2 “� Join zweier� Tabellen
AS� t2 ON� t1~id =� t2~id� “� Joinbedingung;� ~� für� Aliasse
[BYPASSING� BUFFER,� “� Umgehen� des� Tabellenpuffers
UP� TO� n ROWS,� “� Einschränken� der� Ergebnismenge
CLIENT� SPECIFIED] “� Abschalten� der� autom.� Verwendung
... “� der� Mandantennummer
Kapitel 11: Datenbankzugriff & Pufferung – 33Objektverwaltung höherer Ordnung (OHO) – SS 2003
… Open-SQL (Syntax von Select-Statements)...[WHERE condition |�
FOR� ALL� ENTRIES� IN� itab WHERE� condition]�“� Angabe� einer� Menge� von� Vergleichswerten� in� Tabelle� itab
[GROUP� BY fieldlist]
[HAVING condition]
[ORDER� BY fieldlist |� ORDER� BY� PRIMARY� KEY]
Beliebige� ABAP-Anweisungen.
[ENDSELECT.] “� ENDSELECT� ist� nicht� erforderlich� bei“� - SELECT� SINGLE� Statements,� bei“� - Aggregatfunktionen� ohne� GROUP� BY� und� bei“� - INTO� TABLE-Konstrukten
“� Alle� Anweisungen� nach� Ende� des� SELECT“� Statements,� aber� VOR� dem� ENDSELECT� werden“� für� JEDEN� Datensatz� ausgeführt!
Kapitel 11: Datenbankzugriff & Pufferung – 34Objektverwaltung höherer Ordnung (OHO) – SS 2003
Open-SQL-BefehlssatzSELECT
INSERT EinfügenMODIFY Ändern oder einfügenUPDATE ÄndernDELETE Löschen
Indikatorvariable SY-SUBRC�Status der Open-SQL-Anweisungz.B. SY-SUBRC� =� 0 Select erfolgreich
SY-SUBRC� =� 4 Kein Tupel gefunden
Kapitel 11: Datenbankzugriff & Pufferung – 35Objektverwaltung höherer Ordnung (OHO) – SS 2003
Open-SQL: Eigenschaften … Anfrage-Ergebnise werden tupelweise zurückgegeben• Select-Statement muss mit ENDSELECT. abgeschlossen werden• Zwischen SELECT� ...ENDSELECT. wird über alle Ergebnistupel
iteriert (besitzt Cursor-ähnliche Semantik)
TABLES:� zautor.
SELECT� *� FROM� zautor .
WRITE:� /� zautor-nachname,�
zautor-vorname.
ENDSELECT.
Kapitel 11: Datenbankzugriff & Pufferung – 36Objektverwaltung höherer Ordnung (OHO) – SS 2003
… Open-SQL: EigenschaftenIn der FROM-Klausel sind pro Open-SQL-Select-Statement nur maximal zwei Tabellen erlaubt• Explizite Joins sind in Open-SQL nur zwischen zwei transparenten Tabellen
möglich (Pool- oder Clustertabellen sowie Projektionsviews sind nicht erlaubt)
• Join wird an die Datenbank weitergeschickt
Alternative: View definieren (Join in View-Definition einbetten)oder Joins in ABAP-Programmen selbst berechnen:TABLES:� zautor,� zwerk. “� zautor und� zwerk nicht� transparent
SELECT� *� FROM� zautor.
SELECT� *� FROM� zwerkWHERE� � autorid =� zautor-autorid.
WRITE:� /� zautor-nachname,� zwerk-titel.
ENDSELECT. “� zwerk
ENDSELECT� . “� zautor
Kapitel 11: Datenbankzugriff & Pufferung – 37Objektverwaltung höherer Ordnung (OHO) – SS 2003
Open-SQL: JoinJoin-Konstukt in Open-SQL (recht neue Erweiterung) erlaubt einen Equi-Join zweier transparenter Tabellen
TABLES:� zautor,� zwerk.� � “� Beides� transparente� Tabellen
DATA:� � nachname like� zautor-nachname,
titel like� zwerk-titel.
SELECT� A~nachname W~titel
INTO� (nachname,� titel)
FROM� zautor as A JOIN� zwerk as W
ON� � � A~autorid =� W~autorid.
WRITE:� /� nachname,� titel.
ENDSELECT� .
Kapitel 11: Datenbankzugriff & Pufferung – 38Objektverwaltung höherer Ordnung (OHO) – SS 2003
Open-SQL: AggregatfunktionenFolgende Aggregatfunktionen sind in Open-SQL erlaubt(mit der bekannten Semantik)
AVG� (� feldname )
COUNT� (� DISTINCT� feld )
COUNT� (� *� )
MAX� (� feld )
MIN� (� feld )�
SUM� (� feld )
• Blanks sind wichtig!
Kapitel 11: Datenbankzugriff & Pufferung – 39Objektverwaltung höherer Ordnung (OHO) – SS 2003
Native SQL ...Statement im “Dialekt” der unterliegenden DatenbankGeklammert in
EXEC� SQL.
...
ENDEXEC.
Hostvariablen für Rückgabewerte müssen explizit angegeben werden, z.B.DATA:� name like� zautor-nachname.
EXEC� SQL.
SELECT� nachname INTO� :name
FROM� zautor WHERE� ID=5
ENDEXEC.
Kapitel 11: Datenbankzugriff & Pufferung – 40Objektverwaltung höherer Ordnung (OHO) – SS 2003
… Native SQLMandant muss immer explizit angegeben werden...� and� mandt =� 800
Kein Cursor möglich• Abhilfe: Bei EXEC� SQL kann Unterprogramm angegeben werden,
das für jedes Ergebnistupel aufgerufen wird.EXEC� SQL� PERFORMING� ausgabe .
...
ENDEXEC.
FORM� ausgabe .
WRITE� :� /� � � name .
ENDFORM.
Kapitel 11: Datenbankzugriff & Pufferung – 41Objektverwaltung höherer Ordnung (OHO) – SS 2003
“Interaktive Berichte”: EingabeparameterSchlüsselwort Parameters deklariert Eingabeparametereines Berichts
PARAMETERS:� name LIKE� zautor-nachname.
SELECT� *� FROM� zautor
WHERE� � nachname =� name.
…
ENDSELECT.
Kapitel 11: Datenbankzugriff & Pufferung – 42Objektverwaltung höherer Ordnung (OHO) – SS 2003
Praktische Übung (Ü8)Implementierung von Reports in ABAP (mit Datenbankzugriff)• Aufgabe 1:
– Skelett des Programms vorgegeben (ZOHO00ReportOpenSQL)– Kopie in eigenen Namensraum (ZOHOxxReportOpenSQL)– Implementierung mittels Open SQL
• Aufgabe 2:– Skelett des Programms vorgegeben (ZOHO00ReportNativeSQL)– Kopie in eigenen Namensraum (ZOHOxxReportNativeSQL)– Implementierung mittels Native SQL
• Aufgabe 3:– Neuen Bericht erstellen– Wahlweise Open SQL oder Native SQL