Kapitel 11: "Datenbankzugriff und Pufferung"

Werbung
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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 1
11.1 Datenbankzugriff in ERP-Systemen
‰
Standard-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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 2
Erweiterung von ERP Systemen
Client-GUI
Client-GUI
Client-GUI
…
Client-GUI
„Standard“
Individuelle
BetriebsErweiterungen
wirtschaftliche
Betriebswirtschaftliche
Data
AnwendungsAnwendungslogik
Dictionary
logik
Datenbank-Abstraktion
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 3
Datenbankzugriff in SAP R/3
‰
Open 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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 4
Rückblick: Dialog-Workprozess & DB-Schnittstelle
Dialog-Workprozess
Shared Memory
DynPro-Interpreter
ABAP-Interpreter
Native SQL
Open SQL
DatenbankSchnittstelle
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Data
Dictionary
Tabellenpuffer
Kapitel 11: Datenbankzugriff & Pufferung – 5
DB-Zugriff mit Open SQL ...
Data Dictionary
Tabellen-Puffer
Abbildungsregeln,
Constraints, …
Tabelle
KNA1
3
BEGIN
…
SELECT …
…
END
Programm-Puffer
Shared Memory
7
Native
SQL 4
2
1
Tabelle
KNA1
SELECT …
6
Datenbankschnittstelle
5
Optimierung- &
Zugriffsmodul
ABAPInterpreter
Dialog-Workprozess
Objektverwaltung höherer Ordnung (OHO) – SS 2003
DBMS
Kapitel 11: Datenbankzugriff & Pufferung – 6
… DB-Zugriff mit Open SQL
1.
2.
3.
4.
5.
6.
7.
Der ABAP-Interpreter des Workprozesses liest ein
Open SQL-Statement eines ABAP-Programms
Der ABAP-Prozessor reicht das Open SQL-Statement an die
Datenbank-Schnittstelle weiter
Falls die Daten nicht im Puffer sind, generiert die DatenbankSchnittstelle den entsprechenden Native SQL-Befehl.
Ansonsten wird das Datum aus dem Puffer gelesen (Schritt 6)
Die Datenbank-Schnittstelle reicht den Native SQL-Befehl an das
DBMS weiter
Das DBMS liefert Daten zurück
Die Datenbank-Schnittstelle gibt die Daten an den ABAP-Interpreter
Bei Pufferung werden die gelesenen Daten in den Puffer geschrieben
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 7
Übersetzung von Open SQL nach Native SQL ...
Optimierungsmodul
Query mit BindingVariable in
Native SQL
übersetzen
Open SQLQuery
4
Ausführungsplan
mit Binding Variable
Variablen von
Query trennen
7
5
2
Wert zur
Binding Variable
ABAPInterpreter
Native SQL-Query
mit Binding Variable
2
1
7
3
Datenbankschnittstelle
Dialog-Workprozess
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Query-Puffer
Ausführungsplan
mit Binding Variable
6
Erste
Ausführung
der Query
7
Wiederholte
Ausführung
der Query
7
Zugriffsmodul
DBMS
Kapitel 11: Datenbankzugriff & Pufferung – 8
… Übersetzung Open SQL nach Native SQL
1.
2.
3.
4.
5.
6.
7.
Der ABAP-Interpreter übergibt die Open SQL-Anweisung der
Datenbankschnittstelle
Die Datenbank-Schnittstelle ersetzt im Selektionsprädikat die aktuellen
Werte durch Binding-Variablen
Übersetzung des Open SQL-Statements mit Binding-Variablen
in Native SQL
Das DBMS erstellt einen Ausführungsplan
(für Querytyp wegen der Binding-Variablen)
Der Ausführungsplan wird im DBMS gepuffert
Zur Ausführung der Anfrage werden die Binding-Variablen durch
anfragespezifische Werte ersetzt
Bei erneuter Anfrage kann auf den gepufferten Plan zurückgegriffen
werden (nur neues Füllen der Binding-Variablen nötig)
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 9
DB-Zugriff mit Native SQL ...
Data Dictionary
Tabellen-Puffer
Tabelle
KNA1
Abbildungsregeln,
Constraints, …
BEGIN
…
EXEC SQL
…
ENDEXEC
…
END
Programm-Puffer
Shared Memory
1
EXEC SQL
…
ENDEXEC
3
Datenbankschnittstelle
2
Optimierungs- &
Zugriffsmodul
ABAPInterpreter
Dialog-Workprozess
Objektverwaltung höherer Ordnung (OHO) – SS 2003
DBMS
Kapitel 11: Datenbankzugriff & Pufferung – 10
… DB-Zugriff mit Native SQL
1.
2.
3.
Der ABAP-Interpreter liest den EXEC SQL-Block eines
ABAP-Programms
Der ABAP-Interpreter reicht den Befehlsblock direkt an das
DBMS weiter, ohne das SAP Data Dictionary zu konsultieren
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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 11
11.2 Pufferung auf Anwendungsebene
‰
Die Ü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 von
ERP-Systemen
•
•
Anwendungspuffer oberhalb des Datenbankpuffers
Caching von Anwendungsobjekten, nicht von Datenbankobjekten
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 12
Pufferung in ERP Systemen
Client-GUI
Client-GUI
Client-GUI
…
Client-GUI
„Standard“
Individuelle
Data
BetriebsErweiDictionary
wirtschaftliche
terungen
Betriebswirtschaftliche
Puffer für
AnwendungsAnwendungslogik
Anwendungslogik
objekte
Datenbank-Abstraktion
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 13
SAP R/3: Datenpufferung im Applikationsserver
‰
Effizienter Zugriff auf Daten durch Zwischenpufferung
‰
Client 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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 14
Pufferungsstrategien
‰
Pufferungsstrategie 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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 15
Verschiedene Arten der Tabellenpufferung
Dialog-Workprozess
Shared Memory
ABAP-Interpreter
Tabellen-Puffer
…
SELECT *
FROM Kontovollmacht
WHERE KtoNr = 01
AND Name = ‘Leuenberger’
…
KtoNr Name
Vorname
01
Leuenberger Moritz
Vollständige Pufferung
KtoNr
01
01
02
01
03
03
02
04
Datenbankschnittstelle
KtoNr
01
01
02
01
03
03
02
04
Name
Leuenberger
Metzler
Blocher
Schmid
Maurer
Ledergerber
Schmid
Hingis
Vorname
Moritz
Ruth
Christoph
Samuel
Esther
Elmar
Samuel
Martina
Name
Leuenberger
Metzler
Blocher
Schmid
Maurer
Ledergerber
Schmid
Hingis
Vorname
Moritz
Ruth
Christoph
Samuel
Esther
Elmar
Samuel
Martina
Generische Pufferung
KtoNr
01
01
01
Name
Leuenberger
Metzler
Schmid
Vorname
Moritz
Ruth
Samuel
Einzelsatz-Pufferung
KtoNr Name
01
Leuenberger
Tabelle
Schlüssel der Tabelle
Kontovollmacht
Kontovollmacht
Vorname
Moritz
in der Datenbank
Objektverwaltung höherer Ordnung (OHO) – SS 2003
KtoNr
Name
Generischer Schlüssel
Kapitel 11: Datenbankzugriff & Pufferung – 16
Puffer-Synchronisation
‰
‰
‰
Datenä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!
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 17
11.3. ABAP-Programmierung mit Open- und Native SQL
‰
‰
ABAP – Übersicht
Datenbankzugriff aus ABAP-Programmen
•
•
‰
Open SQL
Native SQL
Vorbereitung der praktischen Übung (Ü8) mit SAP R/3 (Teil II)
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 18
ABAP - Die Programmiersprache von SAP
‰
Ursprung im R/2-System:
Allgemeiner Berichts-Aufbereitungs-Prozessor
•
‰
Für Reporting-Zwecke
Ständige Erweiterung der Sprache im R/3-System
Advanced 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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 19
Charakteristik von ABAP
‰
Abarbeitung 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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 20
Tools des R/3 Repository
‰
Data Modeler
•
‰
Data Dictionary
•
‰
Zugriff auf Datenbanktabellen (nur Anwendungsdaten)
Object Navigator
•
‰
Metadatenverwaltung
Data Browser
•
‰
Datenmodellierung
Zugriff auf sämtliche Programmobjekte
Entwicklungswerkzeuge
•
•
•
ABAP-Editor
Screen Painter
Menu Painter (Definition von Buttons & Menüeinträgen)
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 21
Entwicklungsumgebung
‰
ABAP-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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 22
Programmtypen
‰
Ausführbares Programm (Typ 1)
•
•
‰
Modulpool (Typ M)
•
•
‰
‰
‰
Für Dialoganwendungen (Verarbeitungsschritte von DynPros)
Nur über Transaktionsnummer aufrufbar
Funktionsgruppe(Typ F)
•
‰
Für Reports
Nur Programme von diesem Typ können direkt abgearbeitet werden
Sammlung von Funktionen
Include-Programm (Typ I)
Subroutinepool (Typ S)
Klassen und Interfacedefinition (Typ K,J)
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 23
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.
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 24
Grobstruktur von Reports
REPORT Zreportname.
* Ein Stern als erstes Zeichen markiert
* eine Kommentarzeile
TYPES: ...
.
“ alles folgende gilt auch
DATA:
...
.
“ als Kommentar
TABLES: ...
.
PARAMETERS: ...
.
Anweisungen .
Perform Unterprogramm USING Parameterliste.
Anweisungen .
FORM Unterprogramm USING Parameterliste.
Anweisungen .
ENDFORM.
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 25
ABAP: Datendefinition …
‰
Datendefinition
DATA: feldname TYPE datentyp .
DATA: feldname(länge) TYPE datentyp
[ VALUE ‘value’] .
‰
ABAP-Datentypen:
C
N
T
D
F
I
P
X
Text
Numerischer Text
Zeitangabe
Datum
Gleitpunktzahl
Ganze Zahl
Gepackte Zahl (für Festkomma)
Hexadezimalzahl
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 26
… ABAP: Datendefinition
‰
Like-Operator: Typ von Objekten wird aus dem Data Dictionary
übernommen
z.B. Variable saldo soll den Typ des Attributs kontostand der
Tabelle ZOHO00KON besitzen
DATA: 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)
P((n+2)/2) DECIMALS m
…
Objektverwaltung höherer Ordnung (OHO) – SS 2003
für CHAR n
für CURR n, m
Kapitel 11: Datenbankzugriff & Pufferung – 27
(einige) ABAP-Sprachelemente
‰
Bildschirmausgabe
WRITE ‘Hello world’.
WRITE: / ‘Hello’, ‘world’. “ /
‰
Startet Ausgabe in
neuer Zeile
Zuweisungen
field = expression.
(mit impliziter Typumwandlung)
MOVE A TO B.
“ Für die Freunde von Assembler
MOVE-CORRESPONDING A TO B. “
“
“
“
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Zuweisungen der Inhalte von
Elementen gleichen Namens
zwischen zwei Strukturen
z.B. SAP-Tabellen
Kapitel 11: Datenbankzugriff & Pufferung – 28
Tabellendeklaration
‰
Tabellen, die im Data Dictionary definiert (und die aktiviert) sind,
müssen bei Verwendung in ABAP-Programmen explizit deklariert
werden
TABLES:
‰
ZOHO00KUN, ZOHO00KTO
.
Zugriff auf Tabellenelemente:
WRITE:
‘Kundenname: ‘, ZOHO00KUN-name1 .
mysaldo = ZOHO00KTO-kontostand .
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 29
„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 DEFINITION
PUBLIC 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.
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 30
... „Objektorientierung“: ABAP Objects
CLASS myaccount IMPLEMENTATION
METHOD withdraw .
...
ENDMETHOD.
...
ENDCLASS.
‰
Instanziierung und Methodenaufruf
DATA: 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.
...
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 31
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] ] |
“ Ergebnis wird an interne Tabelle angehängt
[APPENDING
[CORRESPONDING FIELDS OF] TABLE itab]
FROM table | (table_name)
| tab AS t1 JOIN tab2
AS t2 ON t1~id = t2~id
[BYPASSING BUFFER,
UP TO n ROWS,
CLIENT SPECIFIED]
...
“
“
“
“
“
“
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Join zweier Tabellen
Joinbedingung; ~ für Aliasse
Umgehen des Tabellenpuffers
Einschränken der Ergebnismenge
Abschalten der autom. Verwendung
der Mandantennummer
Kapitel 11: Datenbankzugriff & Pufferung – 32
… 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!
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 33
Open-SQL-Befehlssatz
‰
‰
‰
‰
‰
‰
SELECT
INSERT
MODIFY
UPDATE
DELETE
Einfügen
Ändern oder einfügen
Ändern
Löschen
Indikatorvariable SY-SUBRC
Status der Open-SQL-Anweisung
z.B.
SY-SUBRC = 0
Select erfolgreich
SY-SUBRC = 4
Kein Tupel gefunden
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 34
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.
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 35
… Open-SQL: Eigenschaften
‰
In 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 zwerk
WHERE autorid = zautor-autorid.
WRITE: / zautor-nachname, zwerk-titel.
ENDSELECT.
“ zwerk
ENDSELECT .
“ zautor
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 36
Open-SQL: Join
‰
Join-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 .
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 37
Open-SQL: Aggregatfunktionen
‰
Folgende Aggregatfunktionen sind in Open-SQL erlaubt
(mit der bekannten Semantik)
AVG (
COUNT
COUNT
MAX (
MIN (
SUM (
•
feldname )
( DISTINCT feld )
( * )
feld )
feld )
feld )
Blanks sind wichtig!
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 38
Native SQL ...
‰
‰
‰
Statement im “Dialekt” der unterliegenden Datenbank
Geklammert 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.
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 39
… Native SQL
‰
Mandant 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 : /
ENDFORM.
name .
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 40
“Interaktive Berichte”: Eingabeparameter
‰
Schlüsselwort Parameters deklariert Eingabeparameter
eines Berichts
PARAMETERS: name LIKE zautor-nachname.
SELECT * FROM zautor
WHERE
nachname = name.
…
ENDSELECT.
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 41
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
Objektverwaltung höherer Ordnung (OHO) – SS 2003
Kapitel 11: Datenbankzugriff & Pufferung – 42
Herunterladen