# AMDP (Informatik)

AMDP (Akronym von ABAP Managed Database Procedures) bezeichnete ursprünglich ein „Framework“ der SAP zum Definieren, Implementieren, Verwalten und Aufrufen von Datenbankprozeduren in der SAP-HANA-Datenbank aus dem ABAP-Applikationsserver heraus. Mittlerweile ist auch eine Unterstützung für Datenbankfunktionen hinzugekommen. Die Implementierung erfolgt in SQLScript, der Abfragesprache für die SAP-HANA-Datenbank.

## Konzept
### Definition von AMDP-Methoden

Die Objekte des AMDP-Framework werden im Deklarationsteil von ABAP-Klassen als ABAP-Methoden definiert. Hier wird noch nicht festgelegt, in welcher Programmiersprache die Implementierung erfolgen soll. Allerdings sind hier ein paar Restriktionen zu beachten, damit die Implementierung als AMDP erfolgen kann:
* Das Interface IF_AMDP_MARKER_HDB muss implementiert sein
* Die Methoden dürfen nur „Call by value“-Parameter haben
* Je nach Objekttyp bestehen weitere Einschränkungen in Bezug auf die Parameter

### Implementierung von AMDP-Methoden

Bei der Implementierung einer Methode wird festgelegt, als welcher Objekttyp die Methode umgesetzt werden soll und in welcher Programmiersprache.

### Generierte Datenbankartefakte

Für jede AMDP-Methode wird eine Datenbankprozedur oder -funktion im Datenbankschema des SAP-ABAP-Datenbankbenutzers erzeugt. Je nach Versionsstand werden zusätzlich noch eine oder zwei weitere Prozeduren generiert, die als „Wrapper“ um diese Objekte dienen. Diese gleichen die Unterschiede in der Definition von ABAP-Methoden und Datenbankprozeduren aus. Beispielsweise werden CHANGING-Parameter der Methode zu einem IN- und einem OUT-Parameter in der Datenbankprozedur umgewandelt.

### Lebenszyklus der Datenbankobjekte

Die Datenbankobjekte werden erst bei Bedarf generiert, d. h. beim ersten Aufruf oder für die Syntaxprüfung abhängiger Datenbankobjekte. Nach Änderungen im Quellcode und dem Aktivieren der ABAP-Klasse werden die Datenbankartefakte zunächst wieder gelöscht und erst bei der nächsten Verwendung neu generiert.

## Objekttypen des AMDP-Framework

Mit dem AMDP-Framework können unterschiedliche Objekttypen erzeugt werden.

### Datenbankprozeduren

Die Datenbankprozeduren sind der älteste Objekttyp im AMDP-Framework, der deshalb auch mit in den Namen AMDP eingeflossen ist. Die so erzeugten Prozeduren lassen sich ganz normal als ABAP-Methoden aufrufen. Es ist aber auch möglich, die zugehörigen Datenbankprozeduren von anderen Datenbankobjekten heraus aufzurufen, unter anderem aus weiteren AMDP-Objekten.

### Datenbankfunktionen

Für die Modularisierung von Entwicklungen in der Datenbank sind Funktionen ein wichtiges Konstrukt. Sie können als Ausdruck in anderen SQL-Anweisungen in Datenbankobjekten verwendet werden. Ein direkter Zugriff aus dem OpenSQL von ABAP-Programmen ist nicht möglich.

#### Tabellenfunktionen

Tabellenfunktionen geben eine Tabelle als Ausdruck zurück, die sich dann beispielsweise in der FROM-Klausel einer SELECT-Anweisung verwenden lässt.

#### Skalare Funktionen (Seit ABAP_BASIS 7.53)

Skalare Funktionen geben einen einzelnen Wert zurück. Sie können verwendet werden, um wiederkehrende Logik zu kapseln, wie z. B. Datumsformatierung.

### „CDS-Table Functions“

Das „Core Data Services (CDS)“-Konzept im ABAP-Applikationsserver ermöglicht die Kapselung von Tabellenfunktionen in CDS-Objekten. Damit können frei programmierte „Views“ erzeugt werden, die sich in ABAP-Programmen wie normale „DDic Views“ abfragen lassen.

## Einsatzszenarien für AMDP
### AMDP für SAP BW/4HANA Transformationsroutinen

Mit dem SAP BW on HANA hat die SAP die Ausführung von Data Transfer Prozessen (DTPs) neu implementiert, und zwar direkt auf der HANA Datenbank. Das hat eine enorme Beschleunigung gebracht und die Laufzeiten ca. um den Faktor 10 reduziert. Eine Voraussetzung für diese HANA Ausführung ist allerdings, dass keine ABAP Routinen in den Transformationen verwendet werden.
Die Alternative zu ABAP Routinen sind Prozeduren in SQLScript. Diese werden bei der Entwicklung als AMDP-Methoden erfasst. Der Rahmen dieser Klassen und Methoden wird vom BW-System passend zur Transformation generiert. Der Entwickler muss dann noch den SQLScript-Code erfassen. Eine tiefergehende Kenntnis von der Definition von Datenbankprozeduren ist nicht notwendig.

### AMDP in ABAP Programmen

Die Nutzung von SQLScript ist vor allem dann sinnvoll, wenn es sich
* um große Datenmengen handelt und
* auf die Laufzeit ankommt.
Beides ist im SAP BW gegeben, weshalb AMDP hier eine große Rolle spielt. Wenn diese Faktoren aber auch auf ein ABAP Programm zutreffen, können auch hier SQLScript über AMDPs genutzt werden, um direkt auf der Datenbank Prozeduren auszuführen und lesend und schreibend auf Tabellen zugreifen, oder in Form von CDS-Table Functions als programmierte Views. Diese werden in SQLScript als Funktion implementiert. Eine CDS-Entität dient dann als Wrapper, um sie für ABAP Programme zur Verfügung zu stellen. Sie können dort wie ein DDic-View in einer SELECT-Abfrage genutzt werden.