42
Kapitel 11: Datenbankzugriff & Pufferung – 1 Objektverwaltung höherer Ordnung (OHO) – SS 2003 Kap. 11 Datenbankzugriff und Pufferung in SAP R/3 11.1 Datenbankzugriff 11.2 Pufferung auf Anwendungsebene 11.3 Workshop: ABAP-Programmierung in SAP R/3 Open SQL Native SQL

11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

Embed Size (px)

Citation preview

Page 1: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 2: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 3: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 4: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 5: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 6: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 7: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 8: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 9: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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)

Page 10: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 11: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 12: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 13: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 14: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 15: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 16: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 17: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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!

Page 18: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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)

Page 19: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 20: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 21: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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)

Page 22: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 23: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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)

Page 24: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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.

Page 25: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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.

Page 26: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 27: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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…

Page 28: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 29: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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 .�

Page 30: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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.

Page 31: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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....

Page 32: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 33: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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!

Page 34: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 35: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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.

Page 36: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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

Page 37: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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� .

Page 38: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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!

Page 39: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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.

Page 40: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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.

Page 41: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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.

Page 42: 11.1 Datenbankzugriff 11.2 Pufferung auf … · Der ABAP-Interpreter reicht den Befehlsblock direkt an das DBMS weiter, ohne das SAP Data Dictionary zu konsultieren 3. Das DBMS optimiert

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