ABAP - Schlüsselwortdokumentation →  ABAP - Referenz →  Externe Daten verarbeiten →  ABAP-Datenbankzugriffe →  Native SQL →  AMDP - ABAP Managed Database Procedures →  AMDP - Methoden →  METHOD - BY DATABASE PROCEDURE, FUNCTION → 

AMDP - SQLScript für die SAP-HANA-Datenbank

SQLScript ist eine in der SAP Hana SQLScript Reference dokumentierte Script-Sprache für die Programmierung von SQLScript-Prozeduren und SQLScript-Funktionen auf der SAP-HANA-Datenbank. Es ist die Implementierungssprache einer AMDP-Methode, bei welcher der Zusatz FOR HDB LANGUAGE SQLSCRIPT bei der Anweisung METHOD angegeben ist.

Hinweise

Weitere Berechtigungen sind für das Debuggen von AMDP-Methoden in den ABAP Development Tools (ADT) notwendig. Fehlende Berechtigungen können mit der Transaktion SICK festgestellt werden.

AMDP-Prozeduren und -Funktionen in SAP-HANA

Die SQLScript-Implementierung einer AMDP-Methode mit Namen meth einer AMDP-Klasse class wird von der ABAP-Laufzeitumgebung unter dem Namen CLASS=>METH als SQLScript-Prozedur bzw. -Funktion im ABAP-Datenbankschema der SAP-HANA-Datenbank abgelegt. Die Großschreibung ist relevant und muss bei der Verwendung im Datenbanksystem beachtet werden. Transport, Verwaltung und Zugangskontrolle erfolgen vollständig im AS ABAP. Auf durch AMDP verwaltete SQLScript-Prozeduren und -Funktionen kann wie folgt zugegriffen werden:

Eine normale im SAP-HANA-Studio oder über Native SQL angelegte SQLScript-Prozedur oder -Funktion kann eine in einer AMDP-Methode implementierte SQLScript-Prozedur aufrufen bzw. auf eine solche SQLScript-Funktion zugreifen, solange diese im Datenbanksystem vorhanden ist. Dies wird aber nicht empfohlen, da die Verwaltung der AMDP-Prozeduren und -Funktionen im AS ABAP erfolgt und die Konsistenz nur für andere AMDP-Prozeduren und -Funktionen des gleichen AS ABAP gewährleistet werden kann.
Nachdem die ABAP-Laufzeitumgebung eine von AMDP verwaltete SQLScript-Prozedur oder -Funktion im Datenbanksystem angelegt hat ist sie im SAP-HANA-Studio sichtbar und sogar editierbar. Davon wird aber dringend abgeraten, da eine solche Änderung keinerlei Einfluss auf die Implementierung in der AMDP-Methode hat und jederzeit von der ABAP-Laufzeitumgebung überschrieben werden kann.

Syntax

Die Syntax einer SQLScript-Prozedur oder -Funktion folgt vollständig der Beschreibung in der SAP Hana SQLScript Reference mit einer Ausnahme: Das Zeichen * an der ersten Position einer Zeile leitet wie in ABAP eine Kommentarzeile ein. Beim Speichern der Prozedur bzw. Funktion im Datenbanksystem wird der Stern * in die dort üblichen zwei Bindestriche -- umgesetzt.

Es können alle SQLScript-Operatoren CE_... verwendet werden, die Views unterstützen. SQLScript-Operatoren, die keine Views unterstützen, wie z.B. CE_COLUMN_TABLE, der nur auf Datenbanktabellen mit der technischen Eigenschaft Column Store arbeitet, können nicht verwendet werden.

In einer SQLScript-Prozedur besteht über die Funktion SESSION_CONTEXT Zugriff auf die Sitzungsvariablen der SAP-HANA-Datenbank. Während eines Aufrufs aus ABAP sind insbesondere die ABAP-spezifischen Sitzungsvariablen auf die Werte entsprechender ABAP-Systemfelder gesetzt. Beim Zugriff auf eine in einer AMDP-Funktion implementieren CDS-Tabellenfunktion über Open SQL ist die Sitzungsvariable CDS_CLIENT auf den optional im Zusatz USING CLIENT angegebenen Wert gesetzt. Ein ändernder Zugriff auf Sitzungsvariablen mit der SQLScript-Anweisung SET ist in einer SQLScript-Prozedur bzw. -Funktion dagegen nicht erlaubt.

Hinweise

Parameterschnittstelle

SQLScript-Prozeduren

Die Parameterschnittstelle einer SQLScript-Prozedur unterstützt mit IN deklarierte Eingabeparameter, mit OUT deklarierte Ausgabeparameter und mit INOUT deklarierte Ein-/Ausgabeparameter. Alle Parameter können skalar und tabellarisch, sein mit Ausnahme von Ein-/Ausgabeparametern, die nur skalar sein können. Bei Verwendung in der Prozedur muss oder kann dem Namen eines Eingabeparameters an bestimmten Operandenpositionen ein Doppelpunkt (:) vorangestellt werden.

Die Parameterschnittstelle einer AMDP-Prozedurimplementierung, die eine SQLScript-Prozedur implementiert, wird entsprechend umgesetzt:

Elementare Methodenparameter werden zu skalaren und tabellarische Methodenparameter werden zu tabellarischen Parametern der Datenbankprozedur. Zusätzlich zu den unter AMDP aufgeführten Einschränkungen für die Parameterschnittstelle einer AMDP-Methode gelten bei der Implementierung mit SQLScript folgende Einschränkungen:

Hinweis

Tabellarische Parameter werden in SQLScript als temporäre Datenbanktabellen behandeln. Auf eine an SQLScript übergebene interne Tabelle kann dort wie auf eine Datenbanktabelle zugegriffen werden.

SQLScript-Funktionen

Die Parameterschnittstelle einer SQLScript-Funktion unterstützt mit IN deklarierte Eingabeparameter und einen mit RETURNS deklarierten Rückgabewert. Die Eingabeparameter einer skalaren Funktion können skalar, die Eingabeparameter einer Tabellenfunktion können skalar und tabellarisch sein. Der Rückgabewert einer skalaren Funktion ist skalar und der Rückgabewert einer Tabellenfunktion ist tabellarisch. Als AMDP-Funktionen werden nur Tabellenfunktionen mit skalaren Eingabeparametern unterstützt. Der Grund ist, dass der Hauptverwendungszweck von AMDP-Funktionen die Implementierung von CDS-Tabellenfunktionen ist, die als Datenquelle lesender SQL-Anweisungen dienen und für deren Parameter nur elementare Datentypen erlaubt sind.

Die Parameterschnittstelle einer AMDP-Funktionsimplementierung, die eine SQLScript-Funktion implementiert, wird entsprechend umgesetzt:

Es gelten die gleichen Einschränkungen wie bei SQLScript-Prozeduren.

Mapping von ABAP-Typen auf SQLScript

Die elementaren ABAP-Typen von Schnittstellenparametern einer AMDP-Methode werden wie in folgenden Tabellen gezeigt auf passende Typen von SQLScript gemappt. Dabei wird unterschieden, ob sich ein Parameter auf einen in ABAP definierten Typ oder einen eingebauten Typ des ABAP Dictionary bezieht. Für andere als die hier aufgeführten SQLScript-Typen können keine AMDP-Prozeduren oder -Funktionen angelegt werden.

Mapping bei Bezug auf in ABAP definierte Typen

Numerische Typen

ABAP-Typ HANA-Typ Anmerkung
b SMALLINT SMALLINT ist 2-Byte-Integer mit Vorzeichen
s SMALLINT SMALLINT ist 2-Byte-Integer mit Vorzeichen
i INTEGER -
int8 BIGINT -
p, Länge leng mit dec Nachkommastellen DECIMAL, Länge 2len-1 mit dec Nachkommastellen -
decfloat16 VARBINARY, Länge 8 Auf der Datenbank nicht als Zahl interpretierbar, es können keine Berechnungen ausgeführt werden
decfloat34 VARBINARY, Länge 16 Auf der Datenbank nicht als Zahl interpretierbar, es können keine Berechnungen ausgeführt werden
f DOUBLE -

Zeichenartige Typen

ABAP-Typ HANA-Typ Anmerkung
c, Länge len NVARCHAR, Länge len -
string NCLOB Nicht erlaubt für Ein-/Ausgabeparameter
n, Länge len NVARCHAR, Länge len Um auf der Datenbank Berechnungen auszuführen, muss ein geeignetes Casting in einen numerischen Datenbanktyp durchgeführt werden. Numerische Ergebnisse müssen in das ABAP-Format zurücktransformiert werden.
d NVARCHAR, Länge 8 Für Datumsberechnungen auf der Datenbank muss ein Casting in den DATE-Typ der Datenbank durchgeführt werden, wofür es in SQLScript die eingebaute Funktion to_dats gibt.
t NVARCHAR, Länge 6 Für Zeitberechnungen auf der Datenbank muss ein Casting in den TIME-Typ der Datenbank durchgeführt werden, wofür es in SQLScript die eingebaute Funktion to_tims gibt.

Byteartige Typen

ABAP-Typ HANA-Typ Anmerkung
x, Länge len VARBINARY, Länge len -
xstring BLOB Nicht erlaubt für Ein-/Ausgabeparameter

Mapping bei Bezug auf im Dictionary definierte Typen

Mit folgenden Ausnahmen werden die eingebauten Typen des ABAP Dictionary wie die ihnen zugeordneten ABAP-Typen gemappt.

Dictionary-Typ HANA-Typ Anmerkung
DF16_DEC, Länge leng mit dec Nachkommastellen DECIMAL, Länge 2len-1 mit dec Nachkommastellen Wertebereich auf der Datenbank kleiner als in ABAP
DF34_DEC, Länge leng mit dec Nachkommastellen DECIMAL , Länge 2len-1 mit dec Nachkommastellen Wertebereich auf der Datenbank kleiner als in ABAP
DF16_SCL - obsolet, nicht unterstützt
DF34_SCL - obsolet, nicht unterstützt
SSTRING, Länge len NVARCHAR, Länge len -

Verwendung

Wie oben beschrieben können über AMDP verwaltete SQLScript-Prozeduren und -Funktionen der SAP-HANA-Datenbank in ABAP-Programmen und anderen AMDP-Prozeduren verwendet werden, wobei die Verwendbarkeit durch die Sichtbarkeit der AMDP-Methoden bestimmt wird. Da im HANA-Datenbanksystem rekursive und zyklische Aufrufe verboten sind, kann

Weiterhin kann eine AMDP-Prozedur oder -Funktion normale SQLScript-Prozeduren und -Funktionen verwenden, die im SAP-HANA-Studio oder über Native SQL angelegt wurden. Diese Prozeduren bzw. Funktionen müssen und können nicht hinter dem Zusatz USING der aufrufenden AMDP-Methode angegeben werden.

Zugriff auf Datenbankschemata

In einer SQLScript-Prozedur kann direkt auf Objekte des gleichen Datenbankschemas zugegriffen werden. Der Name des aktuellen Datenbankschemas muss und darf nicht angegeben werden. Um auf ein Objekt eines anderen Datenbankschemas zuzugreifen, kann dessen Namen wie in SQLScript üblich durch einen Punkt abgetrennt vorangestellt werden. Neben der direkten Angabe des Namens kann mit folgender Syntax ein logisches Datenbankschema angegeben werden:

"$ABAP.schema( [name =] schema_name )"

Die ABAP-Laufzeitumgebung ersetzt diesen Ausdruck inklusive der Anführungszeichen in der SQLScript-Implementierung der Datenbank durch das physikalische Datenbankschema, das dem über schema_name angegebenen logischen Datenbankschema zugeordnet ist.

Ausführbare Beispiele

AMDP - Beispiele.