Ansicht
Dokumentation

ABENAMDP_HDB_SQLSCRIPT - AMDP HDB SQLSCRIPT

ABENAMDP_HDB_SQLSCRIPT - AMDP HDB SQLSCRIPT

RFUMSV00 - Advance Return for Tax on Sales/Purchases   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- SQLScript für die SAP-HANA-Datenbank

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

  • Damit ein AS ABAP SQLScript-Prozeduren und -Funktionen auf der SAP-HANA-Datenbank verwalten kann, benötigt er als Benutzer des Datenbanksystems unter anderem folgende Berechtigungen:
  • Privileg Execute auf dem Objekt GET_PROCEDURE_OBJECTS des Schemas SYS

  • Privileg Execute auf dem Objekt TRUNCATE_PROCEDURE_OBJECTS des Schemas SYS

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.
  • Die Verwendung von SQLScript in AMDP löst den Aufruf von Datenbankprozeduren über Datenbankprozedur-Proxies mit der Anweisung CALL DATABASE PROCEDURE ab. Entweder kann die gewünschte Prozedur vollständig in einer AMDP-Methode implementiert werden oder man ruft eine vorhandene Datenbankprozedur aus einer AMDP-Methode auf. In diesem Fall ersetzt die AMDP-Methode das Datenbankprozedur-Proxy. Datenbankprozedur-Proxies sind aber weiterhin sinnvoll für Szenarien, in denen über Sekundärverbindungen auf vorhandene Prozeduren in SAP-HANA-Datenbanken zugegriffen wird, die neben der Standarddatenbank des aktuellen AS ABAP stehen.

AMDP-Prozeduren und -Funktionen in SAP-HANA

Die SQLScript-Implementierung einer AMDP-Methode mit Namen meth einer AMDP-Klasse class wird vom ABAP-Laufzeit-Framework 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:

  • Aufruf aus ABAP

  • Aufruf aus anderen AMDP-Prozeduren oder -Funktionen
  • Eine mit SQLScript implementierte AMDP-Prozedur oder -Funktion der gleichen oder einer anderen Klasse kann eine andere AMDP-Prozedur mit der üblichen SQLScript-Syntax aufrufen:

CALL "CLASS=>METH"( f1 => a1, f2 => a2, ... );
Die aufgerufene AMDP-Prozedurimplementierung CLASS=>METH muss hinter dem Zusatz USING der aufrufenden Methode aufgeführt sein, wofür die üblichen Sichtbarkeitsregeln von ABAP Objects gelten. Eine in einer Klasse implementierte Datenbankprozedur oder -Funktion kann eine in einer privaten AMDP-Prozedurimplementierung einer anderen Klasse implementiert Prozedur nicht aufrufen, es sei denn es gibt eine Freundschaftsbeziehung zwischen den Klassen.
  • Eine mit SQLScript implementierte AMDP-Prozedur oder -Funktion der gleichen oder einer anderen Klasse kann auf eine mit SQLScript implementierte AMDP-Funktion mit der üblichen SQLScript-Syntax zugreifen, z.B.:

SELECT ... FROM "CLASS=>METH"( f1 => a1, f2 => a2, ... );
Die angegebene AMDP-Funktionsimplementierung CLASS=>METH muss hinter dem Zusatz USING der aufrufenden Methode aufgeführt sein. Eine AMDP-Funktionsimplementierung ist immer öffentlich.
  • Aufruf aus normalen Datenbankprozeduren
Eine normale in der SAP Web IDE for SAP HANA 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 das ABAP-Laufzeit-Framework eine von AMDP verwaltete SQLScript-Prozedur oder -Funktion im Datenbanksystem angelegt hat ist sie in der SAP Web IDE for SAP HANA 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 vom ABAP-Laufzeit-Framework überschrieben werden kann.

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 ein Kommentar 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 lesender 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-Tabellenfunktion implementierten CDS-Tabellenfunktion über 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

  • Die Unterstützung von mit * eingeleiteten ABAP-Kommentaren dient Änderungseinträgen, die vom Werkzeug Modifikationsassistent in ABAP-Programme eingefügt werden. Beim normalen Erstellen einer AMDP-Methode sollte diese Eigenschaft nicht verwendet werden.
  • Eine Überprüfung der Syntax findet nur auf einem AS ABAP statt, dessen Standarddatenbank eine SAP-HANA-Datenbank ist. Dort wird für die Syntaxprüfung eine temporäre Datenbankprozedur bzw. -Funktion angelegt und diese überprüft.
  • Es wird dringend empfohlen, wegen der unter AMDP genannten Gründe, auf die dynamischen Möglichkeiten der SQLScript-Syntax zu verzichten. Dies betrifft insbesondere Anweisungen wie EXEC, EXECUTE IMMEDIATE oder APPLY FILTER.

Parameterschnittstelle

Die elementaren ABAP-Typen von Schnittstellenparametern einer AMDP-Methode werden wie in den Mapping-Tabellen gezeigt auf passende Typen von SQLScript gemappt.

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:

  • Ein mit IMPORTING definierter Eingabeparameter der Methode wird zu einem mit IN deklarierten Eingabeparameter der Prozedur.
  • Ein mit EXPORTING definierte Ausgabeparameter der Methode wird zu einem mit OUT deklarierten Ausgabeparameter der Prozedur.
  • Ein mit CHANGING definierter
  • skalarer Eingabe-/Ausgabeparameter der Methode wird zu einem mit INOUT deklarierten Ein-/Ausgabeparameter der Datenbankprozedur.

  • tabellarischer Ein-/Ausgabeparameter der Methode wird auf der Datenbank in ein Paar von mit IN und OUT deklarierten Ein- und Ausgabeparametern umgesetzt, da SQLScript keine tabellarischen INOUT-Parameter unterstützt. Der OUT-Parameter hat den Namen des CHANGING-Parameters und wird statt diesem in der AMDP-Prozedur verwendet. Der IN-Parameter wird mit einem internen Namen angelegt, der sich aus dem Namen des CHANGING-Parameters und einem Postfix __IN__ zusammensetzt. Der IN-Parameter wird vor Beginn der eigentlichen AMDP-Prozedur dem OUT-Parameter zugewiesen. Diese Umsetzung und der entsprechende Aufruf sind für den ABAP-Entwickler in aller Regel transparent. Sie wird nur sichtbar, wenn man die Datenbankprozedur beispielsweise in der SAP Web IDE for SAP HANA anzeigt oder aus einer anderen Datenbankprozedur aufruft (siehe ausführbares Beispiel).

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:

  • Ein mit CHANGING deklarierter Ein-/Ausgabeparameter darf nicht vom Typ string oder xstring sein. Ausgenommen von dieser Regel sind Parameter, die mit Bezug auf den eingebauten Typ SSTRING des ABAP Dictionary typisiert sind.
  • Die Länge eines mit den Typen c oder n typisierten Parameters ist auf maximal 5000 Zeichen beschränkt.
  • Parametern der Typen string und xstring kann kein Ersatzwert mit DEFAULT zugeordnet werden und sie können somit nicht optional sein. Ab Release kann Parametern der Typen f, decfloat16, decfloat34 und sstring einen Ersatzwert über DEFAULT zugeordnet werden.

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 müssen 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.

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

  • Ein mit IMPORTING definierter Eingabeparameter der Methode wird zu einem mit IN deklarierten Eingabeparameter der Funktion.
  • Der mit RETURNING definierte tabellarische Rückgabewert der Methode wird zu dem mit RETURNS deklarierten tabellarischen Rückgabewert der Prozedur.

Es gelten die gleichen Einschränkungen wie bei SQLScript-Prozeduren, sowie:

  • AMDP-Skalarfunktionen können neben dem Rückgabewert keine Ausgabeparameter haben.

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

  • eine SQLScript-Prozedur bzw. -Funktion sich nicht selbst verwenden,
  • eine AMDP-Methode, die eine SQLScript-Prozedur oder -Funktion implementiert, keine Datenbankprozedur aufrufen oder Datenbankfunktion verwenden, welche wieder die AMDP-Prozedur bzw. -Funktion verwendet.

Weiterhin kann eine AMDP-Prozedur oder -Funktion normale SQLScript-Prozeduren und -Funktionen verwenden, die in der SAP Web IDE for SAP HANA 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 ABAP-Typen

In einer SQLScript-Prozedur kann über das AMDP-Makro $ABAP.type auf solche ABAP-Typen zugegriffen werden, die in den Mapping-Tabellen passenden Typen von SQLScript zugeordnet sind.

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 dem AMDP-Makro $ABAP.schema ein logisches Schema angegeben werden, dem ein physisches Datenbankschema zugeordnet ist.

AMDP - Beispiele






RFUMSV00 - Advance Return for Tax on Sales/Purchases   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 22628 Date: 20240523 Time: 164929     sap01-206 ( 394 ms )