Sie sind auf Seite 1von 12

10.3.

ABAP-Programmierung mit Open- und Native SQL


ABAP bersicht Datenbankzugriff aus ABAP-Programmen

Objektverwaltung hherer Ordnung (OHO) SS 2001

Objektverwaltung hherer Ordnung (OHO) SS 2001

G G G G G

Open SQL Native SQL

Vorbereitung der praktischen bung mit SAP R/3 (Teil II)

Kapitel 10: Datenbankzugriff & Pufferung 1

ABAP/4 - Die Programmiersprache von SAP


Ursprung im R/2-System: Allgemeiner Berichts-Aufbereitungs-Prozessor

Fr Reporting-Zwecke

Stndige Erweiterung der Sprache im R/3-System Advanced Business Application Programming Language

Alle betriebswirtschaftlichen Anwendungen in ABAP implementiert Nur kleiner Systemkern in C /4 symbolisiert, dass es sich um eine 4GL-Sprache handelt Neuerdings: nur noch ABAP, um Entwicklung in Richtung Objektorientierung zu betonen

Kapitel 10: Datenbankzugriff & Pufferung 2

Charakteristik von ABAP


Abarbeitung von ABAP-Programmen:

Objektverwaltung hherer Ordnung (OHO) SS 2001

Objektverwaltung hherer Ordnung (OHO) SS 2001

G G G G G G G G G

ABAP-Sourcen werden kompiliert in Bytecode (Generieren) Bytecode wird interpretiert Programmsourcen und Bytecode werden in der Datenbank verwaltet Dies beinhaltet auch Abhngigkeiten zu anderen Schemaobjekten Bei Bedarf erfolgt Neugenerierung vor Interpretation des Bytecodes Wenn z.B. bei berprfung der Abhngigkeiten festgestellt wird, dass ein bentigtes Objekt in einer neueren Version vorliegt

Release 4.5x: ber 250 Schlsselwrter, Tendenz steigend! Sehr schwach ausgeprgte Orthogonalitt

Kapitel 10: Datenbankzugriff & Pufferung 3

Tools des R/3 Repository


Data Modeler

Datenmodellierung Metadatenverwaltung Zugriff auf Datenbanktabellen (nur Anwendungsdaten) Zugriff auf smtliche Programmobjekte ABAP-Editor Screen Painter, ... Definitionswerkzeuge Laufzeitwerkzeuge
Kapitel 10: Datenbankzugriff & Pufferung 4

Data Dictionary Data Browser Object Navigator Entwicklungswerkzeuge

Business Workflow

Entwicklungsumgebung
ABAP-Editor

Objektverwaltung hherer Ordnung (OHO) SS 2001

Objektverwaltung hherer Ordnung (OHO) SS 2001

G G G G G G G

Ist selbst ein ABAP-Programm, die Oberflche des Editors ist also ein Dynpro Etwas gewhnungsbedrftige Oberflche Sehr gute Integration in die komplette Entwicklungsumgebung (SAP Repository, andere Tools) Doppelklick auf Name eines Schemaobjektes ffnet das entsprechende Tool (z.B. Data Dictionary fr Tabellen) Hilfe zu ABAP-Befehlen (Schlsselworte) mittels F1 Integration von Syntaxberprfungen (Programm Prfen Syntax) Bytecode-Erzeugung (Programm Generieren)

Kapitel 10: Datenbankzugriff & Pufferung 5

Programmtypen
Ausfhrbares Programm (Typ 1)

Fr Reports Nur Programme von diesem Typ knnen direkt abgearbeitet werden Fr Dialoganwendungen (Verarbeitungsschritte von DynPros) Nur ber Transaktionsnummer aufrufbar Sammlung von Funktionen

Modulpool (Typ M)

Funktionsgruppe(Typ F) Include-Programm (Typ I) Subroutinepool (Typ S) Klassen und Interfacedefinition (Typ K,J)

Kapitel 10: Datenbankzugriff & Pufferung 6

Aufbau von ABAP-Anweisungen


Wie so viele Sprachen besitzt ABAP den, Anspruch der natrlichen 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, Schlsselwort fr mehrere Parameter gilt.

Objektverwaltung hherer Ordnung (OHO) SS 2001

Kapitel 10: Datenbankzugriff & Pufferung 7

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 hherer Ordnung (OHO) SS 2001

Kapitel 10: Datenbankzugriff & Pufferung 8

ABAP: Datendefinition
Datendefinition DATA: feldname TYPE datentyp . DATA: feldname(lnge) TYPE datentyp [ VALUE value] . ABAP-Datentypen:
C N T D F I P X Text Numerischer Text Zeitangabe Datum Gleitpunktzahl Ganze Zahl Gepackte Zahl (fr Festkomma) Hexadezimalzahl
Kapitel 10: Datenbankzugriff & Pufferung 9

Objektverwaltung hherer Ordnung (OHO) SS 2001

Objektverwaltung hherer Ordnung (OHO) SS 2001

G G G G

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 gewhlt werden, der den externen Datentyp aufnimmt
(ABAP-Datentypen und Datentypen des Dictionarys bzw. der unterliegenden Datenbank sind nicht vollstndig kompatibel)

z.B.

C(n) P((n+2)/2) DECIMALS m

fr CHAR n fr CURR n, m

Kapitel 10: Datenbankzugriff & Pufferung 10

(einige) ABAP-Sprachelemente
Bildschirmausgabe WRITE Hello world. WRITE: / Hello, world. / Startet Ausgabe in neuer Zeile

Objektverwaltung hherer Ordnung (OHO) SS 2001

Objektverwaltung hherer Ordnung (OHO) SS 2001

G G G G

Zuweisungen
field = expression. MOVE A TO B. (mit impliziter Typumwandlung) Fr die Freunde von Assembler Zuweisungen der Inhalte von Elementen gleichen Namens zwischen zwei Strukturen z.B. SAP-Tabellen

MOVE-CORRESPONDING A TO B.

Kapitel 10: Datenbankzugriff & Pufferung 11

Tabellendeklaration
Tabellen, die im Data Dictionary definiert (und die aktiviert) sind, mssen bei Verwendung in ABAP-Programmen explizit deklariert werden TABLES: ZOHO00KUN, ZOHO00KTO .

Zugriff auf Tabellenelemente: WRITE: Kundenname: , ZOHO00KUN-name1 .

mysaldo = ZOHO00KTO-kontostand .

Kapitel 10: Datenbankzugriff & Pufferung 12

Open-SQL (Syntax von des 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 angehngt [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] ...
Join zweier Tabellen Joinbedingung; ~ fr Aliasse Umgehen des Tabellenpuffers Einschrnken der Ergebnismenge Abschalten der autom. Verwendung der Mandantennummer
Kapitel 10: Datenbankzugriff & Pufferung 13

Objektverwaltung hherer Ordnung (OHO) SS 2001

Open-SQL (Syntax von des 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 fr JEDEN Datensatz ausgefhrt!
Objektverwaltung hherer Ordnung (OHO) SS 2001 Kapitel 10: Datenbankzugriff & Pufferung 14

Open-SQL-Befehlssatz
SELECT INSERT MODIFY UPDATE DELETE

Objektverwaltung hherer Ordnung (OHO) SS 2001

Objektverwaltung hherer Ordnung (OHO) SS 2001

G G G G G G G

Einfgen ndern oder einfgen ndern Lschen

Indikatorvariable SY-SUBRC Status der Open-SQL-Anweisung z.B. SY-SUBRC = 0 Select erfolgreich SY-SUBRC = 4 Kein Tupel gefunden

Kapitel 10: Datenbankzugriff & Pufferung 15

Open-SQL: Eigenschaften
Anfrageergebnise werden tupelweise zurckgegeben

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 10: Datenbankzugriff & Pufferung 16

Open-SQL: Eigenschaften
In der FROM-Klausel sind pro Open-SQL-Select-Statement nur maximal zwei Tabellen erlaubt

Objektverwaltung hherer Ordnung (OHO) SS 2001

Objektverwaltung hherer Ordnung (OHO) SS 2001

G G G

Explizite Joins sind in Open-SQL nur zwischen zwei transparenten Tabellen mglich (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. zwerk ENDSELECT. ENDSELECT . zautor
Kapitel 10: Datenbankzugriff & Pufferung 17

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 .
Kapitel 10: Datenbankzugriff & Pufferung 18

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 )

Objektverwaltung hherer Ordnung (OHO) SS 2001

Objektverwaltung hherer Ordnung (OHO) SS 2001

G G G G

Blanks sind wichtig!

Kapitel 10: Datenbankzugriff & Pufferung 19

Native SQL ...


Statement im Dialekt der unterliegenden Datenbank Geklammert in EXEC SQL. ... ENDEXEC. Hostvariablen fr Rckgabewerte mssen explizit angegeben werden, z.B.
DATA: name like zautor-nachname. EXEC SQL. SELECT nachname INTO :name FROM zautor WHERE ID=5 ENDEXEC.

Kapitel 10: Datenbankzugriff & Pufferung 20

Native SQL
Mandant muss immer explizit angegeben werden ... and mandt = 800 Kein Cursor mglich

Objektverwaltung hherer Ordnung (OHO) SS 2001

Objektverwaltung hherer Ordnung (OHO) SS 2001

G G G

Abhilfe: Bei EXEC SQL kann Unterprogramm angegeben werden, das fr jedes Ergebnistupel aufgerufen wird. EXEC SQL PERFORMING ausgabe . ... ENDEXEC. FORM ausgabe . WRITE : / ENDFORM.

name .

Kapitel 10: Datenbankzugriff & Pufferung 21

Interaktive Berichte: Eingabeparameter


Schlsselwort Parameters deklariert Eingabeparameter eines Berichts PARAMETERS: name LIKE zautor-nachname.

SELECT * FROM zautor WHERE ENDSELECT. nachname = name.

Kapitel 10: Datenbankzugriff & Pufferung 22

Literatur (Lehrbuchsammlung)
B. Matzke. ABAP/4 - Die Programmiersprache des SAP-Systems R/3. 2. Auflage, Addison-Wesley, 1999. R. Kretschmer, W. Weiss. SAP-R/3-Entwicklung mit ABAP/4. 2. Auflage, Sybex Verlag, 1997.

Objektverwaltung hherer Ordnung (OHO) SS 2001

Objektverwaltung hherer Ordnung (OHO) SS 2001

G G G G

Online: www.dbs.ethz.ch/sapr3

Kapitel 10: Datenbankzugriff & Pufferung 23

Praktische bung
Implementierung von Reports in ABAP (mit Datenbankzugriff)

Aufgabe 1: Skelett des Programms vorgegeben (ZOHO00RO) Kopie in eigenen Namensraum (ZOHOxxRO) Implementierung mittels Open SQL Aufgabe 2: Skelett des Programms vorgegeben (ZOHO00RN) Kopie in eigenen Namensraum (ZOHOxxRN) Implementierung mittels Native SQL Aufgabe 3: Neuen Bericht erstellen Wahlweise Open SQL oder Native SQL

Kapitel 10: Datenbankzugriff & Pufferung 24