User Defined Libraries (UDL) in SQLScript

User Defined Libraries (UDL) in SQLScript

Veröffentlicht am 18. November 2019 von

Jörg Brandeis

| News | SQLScript |

Mit SAP HANA 2.0 SPS03  wurde das Konzept der benutzerdefinierten Bibliotheken (User Defined Libraries - UDL) in SQLScript eingeführt. Es ermöglicht uns als Entwickler, mehrere Funktionen, Prozeduren und Variablen in einem Objekt zu bündeln. Alle Komponenten einer UDL werden in einem Stück Quellcode definiert und es wird auch nur ein Metadaten-Objekt dafür angelegt.

Eine Bibliothek ähnelt in einigen Punkten einer statischen Klasse in ABAP, d.h. einer Klasse, die nur Klassenmethoden und -variablen enthält. Die Sichtbarkeit von einzelnen Komponenten einer Bibliothek kann mit den Schlüsselwörtern PUBLIC und PRIVATE gesteuert werden. Die Eigenschaft PRIVATE legt fest, dass nur innerhalb der gleichen Bibliothek auf diese Komponente zugegriffen werden kann. Über PUBLIC können Sie dagegen einen freien Zugriff von außerhalb erlauben.

Die Lebensdauer der Daten einer Variablen einer UDL ist auf eine Session begrenzt. Auf öffentliche Variablen kann auch von außerhalb der Bibliothek zugegriffen werden.

Direkter Zugriff auf Komponenten

Innerhalb derselben Bibliothek können alle Komponenten direkt verwendet werden. Die Variablen der Bibliothek sind auch in allen Prozeduren und Funktionen der Bibliothek direkt sichtbar. Außerhalb der Bibliothek muss man der Komponente jeweils den Namen der UDL voranstellen:

  <UDL>:<Komponente> 

Zugriff über Alias

Bis SAP HANA 2.0 SPS03 ist der Zugriff von außerhalb der Bibliothek nur innerhalb eines logischen Containers möglich. Dazu muss dort jeweils ein Alias pro Bibliothek angelegt werden, über den dann auf die Komponenten zugegriffen werden kann. Pro Bibliothek ist nur ein Aliasname möglich. Mit SPS04 wurde der direkte Zugriff erlaubt, was auch die Nutzung von Komponenten außerhalb logischer Container ermöglicht.

Das Beispiel im folgenden Listing zeigt die unterschiedlichen Arten des Zugriffs auf die Komponenten der UDL:

  • innerhalb der gleichen Bibliothek
  • außerhalb der Bibliothek über den Bibliotheksnamen
  • in einem anderen logischen Container mit Aliasnamen

Listing: Definition einer UDL mit Konstanten

In nächsten Listing sehen Sie, wie man diese dann in einer Abfrage an anderer Stelle nutzen kann. Voraussetzung hierfür ist aber natürlich die Deklaration mit dem Schlüsselwort PUBLIC.

Listing: Nutzung der Konstanten aus dem Listing 1.36

Leider gibt es bei der Nutzung von Variablen und Konstanten außerhalb der Bibliothek noch Einschränkungen, weshalb es notwendig sein kann, eine Variable aus einer Bibliothek zunächst in eine lokale Variable zu kopieren. Das ist zum Beispiel der Fall, wenn Sie einen Wert in der TOP -Klausel einer Abfrage nutzen möchten.

Anders herum ist das direkte Zuweisen einer UDL-Variablen mit  der Anweisung SELECT … INTO nicht möglich. Stattdessen muss zunächst eine lokale Variable gefüllt werden, die dann der Variablen aus der UDL zugewiesen wird.

Fazit

Insgesamt scheint Konzept der benutzerdefinierten Bibliotheken noch nicht zu 100 Prozent ausgereift. Nichtdestotrotz bietet es bereits viele nützliche Features. Es bleibt zu hoffen, dass mit dem nächsten Servicepack das Konzept weiter abgerundet wird. Auch eine Integration von UDL in das AMDP-Framework wäre wünschenswert.