24
Kapitel 10: Datenbankzugriff & Pufferung – 1 Objektverwaltung höherer Ordnung (OHO) – SS 2001 10.3. ABAP-Programmierung mit Open- und Native SQL ABAP – Übersicht Datenbankzugriff aus ABAP-Programmen Open SQL Native SQL Vorbereitung der praktischen Übung mit SAP R/3 (Teil II)

10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

  • Upload
    vuminh

  • View
    217

  • Download
    2

Embed Size (px)

Citation preview

Page 1: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 1Objektverwaltung höherer Ordnung (OHO) – SS 2001

10.3. ABAP-Programmierung mit Open- und Native SQL

� ABAP – Übersicht� Datenbankzugriff aus ABAP-Programmen

• Open SQL• Native SQL

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

Page 2: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 2Objektverwaltung höherer Ordnung (OHO) – SS 2001

ABAP/4 - 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-SystemAdvanced 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

Page 3: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 3Objektverwaltung höherer Ordnung (OHO) – SS 2001

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

Page 4: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 4Objektverwaltung höherer Ordnung (OHO) – SS 2001

Tools des R/3 Repository

� Data Modeler• Datenmodellierung

� Data Dictionary• Metadatenverwaltung

� Data Browser• Zugriff auf Datenbanktabellen (nur Anwendungsdaten)

� Object Navigator• Zugriff auf sämtliche Programmobjekte

� Entwicklungswerkzeuge• ABAP-Editor• Screen Painter, ...

� Business Workflow• Definitionswerkzeuge• Laufzeitwerkzeuge

Page 5: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 5Objektverwaltung höherer Ordnung (OHO) – SS 2001

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)

Page 6: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 6Objektverwaltung höherer Ordnung (OHO) – SS 2001

Programmtypen

� Ausfü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 7: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 7Objektverwaltung höherer Ordnung (OHO) – SS 2001

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 8: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 8Objektverwaltung höherer Ordnung (OHO) – SS 2001

Grobstruktur von Reports

REPORT 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 9: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 9Objektverwaltung höherer Ordnung (OHO) – SS 2001

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 10: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 10Objektverwaltung höherer Ordnung (OHO) – SS 2001

… 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) für CHAR nP((n+2)/2) DECIMALS m für CURR n, m…

Page 11: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 11Objektverwaltung höherer Ordnung (OHO) – SS 2001

(einige) ABAP-Sprachelemente

� Bildschirmausgabe

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 12: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 12Objektverwaltung höherer Ordnung (OHO) – SS 2001

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 .

Page 13: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 13Objektverwaltung höherer Ordnung (OHO) – SS 2001

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 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 14: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 14Objektverwaltung höherer 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“ für JEDEN Datensatz ausgeführt!

Page 15: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 15Objektverwaltung höherer Ordnung (OHO) – SS 2001

Open-SQL-Befehlssatz

� SELECT

� INSERT Einfügen� MODIFY Ändern oder einfügen� UPDATE Ändern� DELETE Löschen

� Indikatorvariable SY-SUBRCStatus der Open-SQL-Anweisungz.B. SY-SUBRC = 0 Select erfolgreich

SY-SUBRC = 4 Kein Tupel gefunden

Page 16: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 16Objektverwaltung höherer Ordnung (OHO) – SS 2001

Open-SQL: Eigenschaften …

� Anfrageergebnise 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 17: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 17Objektverwaltung höherer Ordnung (OHO) – SS 2001

… 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 nichterlaubt)

• 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 18: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 18Objektverwaltung höherer Ordnung (OHO) – SS 2001

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 WON A~autorid = W~autorid.

WRITE: / nachname, titel.

ENDSELECT .

Page 19: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 19Objektverwaltung höherer Ordnung (OHO) – SS 2001

Open-SQL: Aggregatfunktionen

� Folgende 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 20: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 20Objektverwaltung höherer Ordnung (OHO) – SS 2001

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.

Page 21: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 21Objektverwaltung höherer Ordnung (OHO) – SS 2001

… 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 : / name .

ENDFORM.

Page 22: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 22Objektverwaltung höherer Ordnung (OHO) – SS 2001

“Interaktive Berichte”: Eingabeparameter

� Schlüsselwort Parameters deklariert Eingabeparametereines Berichts

PARAMETERS: name LIKE zautor-nachname.

SELECT * FROM zautor

WHERE nachname = name.

ENDSELECT.

Page 23: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 23Objektverwaltung höherer Ordnung (OHO) – SS 2001

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.

� Online: www.dbs.ethz.ch/sapr3

Page 24: 10.3. ABAP-Programmierung Open- und · PDF fileObjektverwaltung höherer Ordnung (OHO) –SS 2001 Kapitel 10: Datenbankzugriff & Pufferung – 2 ABAP/4 -Die Programmiersprache von

Kapitel 10: Datenbankzugriff & Pufferung – 24Objektverwaltung höherer Ordnung (OHO) – SS 2001

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