Hervorgehoben

Erster SQLScript Videokurs verfügbar

Seit Anfang August ist auf unserer Seite www.brandeis-training.de der erste Videokurs „SQLScript Grundlagen“ verfügbar.

Dieser Videokurs ist als vollwertige Schulung konzipiert und entspricht Inhaltlich meinen bewährten Firmenschulungen SQLScript bzw. dem ersten Teil des Kurses SQLScript für BW-Berater.

Lernen Sie die Grundlagen der Sprache SQLScript, dem SQL-Dialekt für die SAP HANA Datenbank, und die zugehörigen Werkzeuge zur Programmierung kennen.

Dieser Kurs fokusiert sich auf die deklarativen Aspekte der Abfragesprache SQLScript. Sie lernen, wie Sie performante Abfragen auf der SAP HANA Datenbank erstellen und testen können. Dazu lernen Sie die notwendigen Werkzeuge wie die Web-Based Development Workbench und die SQL-Konsole kennen.

Sie erhalten 3 Monate Zugriff auf den Kurs mit allen Videos und Übungen. In diesem Zeitraum können Sie für Fragen auch eine Sprechstunde vereinbaren und jederzeit über das Supportportal Unterstützung zu konkreten Problemen anfordern. 

Der Kurs ist in 4 Wochenabschnitte mit jeweils ca. 4 Stunden Lernaufwand eingeteilt. Alle Inhalte sind aber sofort nach der Buchung verfügbar.

Nach Abschluss aller Lektionen und dem Bestehen des Abschlusstests erhalten Sie ein Zertifikat, dass die erfolgreiche Teilnahme bestätigt. 

Lizenzschlüssel für CAL Developer System A4H erneuern

Jeder, der ein BW/4HANA Entwicklersystem in der SAP Cloud Appliance Library betreibt, kennt das Problem: Wenn man vergisst, rechtzeitig die Lizenz einzuspielen (SAP Hinweis 1644792, SAP Doku), dann ist das System nicht mehr erreichbar und die Datenbank geht in den Lockdown Modus (SAP Hinweis 2678651).

Wenn man die HANA und den A4H Lizenzschlüssel rechtzeitig einspielt, ist das aber relativ kleines Problem und in 5 Minuten erledigt. Wichtig ist: Sowohl BW/4HANA als auch SAP HANA benötigen eine Lizenz. Leider ist in der Anleitung der SAP hierzu ein wichtiges Detail vergessen worden: Man muss sich auf der HANA mit der Systemdatenbank und nicht mit dem A4H Tenant verbinden. Häufig ist für die Systemdatenbank noch kein eigenes System in Eclipse angelegt. Das geht mit den folgenden Parametern:

Parameter zum Anlegen eines Systems für die Systemdatenbank

In dem Beispiel ist der Hostname in der etc/hosts Datei bereits auf die IP gemappt. Alternativ müsst Ihr die IP-Adresse nehmen.

Benötigte Zeit: 5 Minuten.

HANA & BW Lizenz erneuern

  1. In Eclipse mit der Systemdatenbank mit dem Benutzer SYSTEM verbinden

    Das ist die Verbindung SYSTEMDB@HDB (SYSTEM) !

  2. HANA Hardware Key kopieren

    Unter den Properties im Bereich License den Hardware Key markieren und in die Zwischenablage legen.

  3. HANA Lizenzschlüssel generieren lassen

    Auf der folgenden Website die notwendigen Informationen eintrage: https://go.support.sap.com/minisap/#/minisap
    Für die HANA Lizenz unter dem BW/4HANA System müsst Ihr die Option
    HDB - SAP HANA Platform Edition (64GB)
    ankreuzen. Das kann sich aber ändern und die korrekte Bezeichnung sollte im „Getting Started Guide“ für Eure Lösung stehen.

  4. Alte HANA Lizenz Löschen und neue HANA Lizenz einspielen

    Siehe Abbildung von Schritt 3.
    Falls die Buttons „Delete License Key“ und „Install License Key“ ausgegraut und inaktiv sind, bitte noch mal prüfen, dass Ihr tatsächlich mit der Systemdatenbank verbunden seid!
    Erst Löschen der Lizenz, dann die im vorigen Schritt runtergeladene Lizenz hochladen.

  5. BW-Lizenz erneuern

    Jetzt wird in die SAP GUI gewechselt. Dazu im SAP Logon mit SAP* im Mandanten 000 anmelden mit dem Standardkennwort.

  6. Transaktion SLICENSE aufrufen

    Und den „Active Hardware Key“ in die Zwischenablage

  7. A4H Lizenzschlüssel für das BW erzeugen

    Wie in Schritt 3, nur dieses Mal mit dem anderen Hardware Key und dem System A4H. Es wird eine Datei A4H_Multiple.txt erzeugt.

  8. Alte Lizenzen Löschen und neue einspielen

    Wieder zurück in die SAP GUI, rechtsklick auf die alten Lizenzen und „Delete license“ auswählen. Wenn beide Lizenzen weg sind, auf Install klicken und die Datei A4H_Multiple.txt aus dem vorherigen Schritt hochladen.

  9. Transaktion SECSTORE aufrufen

    In der Anleitung der SAP ist erwähnt, dass man noch die Transaktion SECSTORE aufrufen soll und dort mit F8 alle Einträge prüfen soll. Das funktioniert bei mir prima, aber leider ist nicht erwähnt, was man machensoll, wenn die Prüfungen scheitern. 😉

Das war die Anleitung. Vor allem habe ich sie für mich aufgeschrieben, da ich immer mal wieder an den gleichen Hürden hänge. Ich freue mich aber auch über Anregungen und Feedback meiner Leser.

DML Tabellenvariablen in SQLScript

Mit dem Konzept der DML Tabellenvariablen hat die SAP die bisherigen Konzepte zum ändernden Zugriff auf Tabellenvariablen in SQLScript sinnvoll Ergänzt. Der Indexbasierte Zugriff und die Änderungsoperatoren waren sperrig und erforderten eine Menge imperativem Quellcode, um keine Änderungen in einer Tabelle zu machen. Das ist mit dem letzten SPS besser geworden, da hier Tabellenvariablen eingeführt wurden, die sich mit den normalen SQL Anweisungen bearbeiten lassen. In der 2. Auflage meines Buches habe ich darüber ein kleines Kapitel geschrieben:

DML Tabellenvariablen in SQLScript

Mit SP04 für SAP HANA 2.0 ist die Verwendung der Data-Manipulation-Language-Anweisungen (DML-Anweisungen) INSERT, UPDATE und DELETE, die normalerweise für Datenbanktabellen verwendet werden, auch für Tabellenvariablen möglich. Um in den Anweisungen zwischen Datenbanktabellen und Tabellenvariablen zu unterscheiden, muss Letzeren der Doppelpunkt vorangestellt werden.

Der Inhalt einer Tabellenvariable darf entweder mit DML-Anweisungen bearbeitet werden oder mit den anderen vorgestellten Anweisungen, wie zum Beispiel durch Zuweisung, indexbasierten Zugriff oder die Tabellenoperatoren verändert werden. Beide Varianten sind mit der gleichen Tabellenvariable nicht möglich. Tabellenvariablen, die mit DML-Anweisungen verändert werden, nennen wir im Folgenden DML-Tabellenvariablen.

Deklaration von DML Tabellenvariablen

Das bedeutet auch, dass die Definition einer DML-Tabellenvariable nicht implizit über eine Zuweisung erfolgen darf. Stattdessen muss die DML-Tabellenvariable am Anfang eines Blocks mit DECLARE angelegt werden. Die Spaltendefinition erfolgt hier wie bei Datenbanktabellen, das bedeutet, dass Spalten auch als PRIMARY KEY markiert werden und es kann die Einschränkung NOT NULL für einzelne Spalten festgelegt werden. Folgend sehen Sie ein Beispiel für die Deklaration:

DECLARE lt_dml TABLE (vorname  NVARCHAR(30),
nachname NVARCHAR(30));

Um Daten in eine DML-Tabellenvariable einzufügen, müssen wir die INSERT-Anweisung verwenden:

INSERT INTO :lt_dml (SELECT vorname,
nachname
FROM benutzer);

Der lesende Zugriff auf DML-Tabellenvariablen mit einer SELECT-Abfrage funktioniert aber wie bei gewöhnlichen Tabellenvariablen:

SELECT *
FROM :lt_dml;

Falls die gleichen Daten sowohl in DML-Tabellenvariablen mit DML-Anweisungen, als auch in normalen Tabellenvariablen mit den anderen Anweisungen verarbeitet werden sollen, müssen Sie diese von einer Variablen in die andere kopieren:

lt_normal = SELECT * FROM :lt_dml;

Quelle: SQLScript für SAP HANA, 2. Auflage

Fazit

Die neuen DML Tabellenvariablen sind super praktisch. Aber die Inkompatibilität zu den anderen Tabellenvariablen nervt. Vor allem die Inline Deklaration durch eine einfache Zuweisung vermisse ich bei dem neuen Konzept sehr. 

Jetzt Kosten sparen bei der Fortbildung

Für SAP-Beratungshäuser und selbständige SAP-Berater bietet die aktuelle Krise eine gute Gelegenheit, das Know-How auf Vordermann zu bringen. Und das zu wesentlich geringeren Kosten als sonst. 

Vor COVID-19

In den letzten Jahren sind dank der SAP HANA Datenbank und den damit verbundenen, neuen Produkten S/4HANA und BW/4HANA viele Projekte bei SAP-Kunden entstanden. Das hat zu zwei Auswirkungen geführt:

1.      Die Beratungshäuser und selbständigen Berater in dem Bereich sind in letzter Zeit sehr gut ausgelastet gewesen.  

2.      Da die Produkte und Technologien neu sind, fehlen wirklich erfahrene Berater. Es besteht erheblicher Schulungsbedarf.

Und in der Krise…

Viele SAP-Kunden sind momentan sehr vorsichtig mit dem Geld ausgeben. Manche Projekte werden vorübergehend gestoppt, andere werden gar nicht erst begonnen. Und fast überall werden die Budgets für externe Unterstützung reduziert oder gestrichen. Gerade bei Konzernen, deren Mitarbeiter teilweise in Kurzarbeit geschickt werden, ist das gut nachvollziehbar.

Das führt zu schlechter Auslastung der SAP-Beratungshäuser und selbständigen SAP-Experten. Diese können nicht mehr Vollzeit fakturieren. Nach den letzten Jahren mit einer sehr guten Auslastung wird das sicherlich eine Weile lang zu verkraften sein.

…führt der Kostendruck zu Fehlentscheidungen

Um das Jahresergebnis nicht zu belasten, werden natürlich auch dort die Budgets für externe Ausgaben deutlich reduziert. Aber gerade im Bereich der Fortbildung ist das eine betriebswirtschaftliche Fehlentscheidung. Denn es wird außer Acht gelassen, dass die Opportunitätskosten, also die nicht fakturierten Zeiten der Schulungsteilnehmer, den mit Abstand größten Kostenblock bei einer Schulung ausmachen. Diese Kosten entstehen aber nur dann, wenn die Mitarbeiter nahezu voll ausgelastet sind. Und das wird ja hoffentlich bald wieder der Fall sein. Hier ein kleiner Vergleich, bei dem ich die Opportunitätskosten noch recht niedrig angesetzt habe:

Fazit

Schulungsbedarf besteht im Bereich SAP HANA Technologien. Aber wer jetzt schult, kann später, wenn die Auslastung wieder Richtung 100% geht, motivierte und qualifizierte Mitarbeiter voll fakturieren lassen. Wer jetzt aber spart, der wird früher oder später eine wesentlich höhere Rechnung zahlen müssen. 

SAP Schulungen – für das Homeoffice optimiert

In den letzen Wochen habe ich einige Online Schulungen durchgeführt. Dabei habe ich unterschiedliche Tools und Formate ausprobiert. Denn ich möchte nicht einfach nur die bewährten Inhouse Schulungen 1:1 online halten. Und ich habe natürlich auch immer fleißig Feedback von den Teilnehmern eingesammelt, damit mein Angebot optimieren kann.

Zeitlich flexibler

Ein großer Vorteil bei Online Veranstaltungen ist, dass man nicht mehr an feste Zeitblöcke gebunden ist. Die meisten Präsenzschulungen finden tagesweise statt. Meist sind es auch mehrere Tage am Stück. Das ist nicht Ideal, weil es sehr anstrengend ist, einen vollen Tag in einer Schulung zu sitzen. Ich habe es bei Präsenzschulungen gelegentlich erlebt, das einzelnen Teilnehmer nach der Mittagspause die Augen kurz zufallen. Das ist normal – denn wir können uns einfach nicht so lange am Stück konzentrieren.
Bei Online Schulungen sind wir weniger an die Tagesblöcke gebunden. Es ist auch möglich, eine Schulung statt an 3 Tagen á 7 Schulungsstunden auch an 5 Vor- oder Nachmittagen durchzuführen. Und diese Termine kann man auch auf 2 Wochen verteilen. Das hat mehrere Vorteile:

  • Die Schulungsinhalte verteilen sich auf einen längeren Zeitraum. Man bleibt aufnahmefähig und kann auch zwischendurch über die Inhalte nachdenken
  • Das Tagesgeschäft kann weiter gehen. Es ist nicht nötig, dass während der Schulung noch mal eben etwas erledigt wird. Das kann man in der anderen Tageshälfte machen
  • Es ist leichter, Termine zu finden
  • In der schulungsfreien Zeit können die Teilnehmer auch noch mal die Themen anschauen oder Übungen machen
  • Der häufig etwas monotone Homeoffice Alltag wird aufgelockert

Das Vorgehen hat sich bereits in 2 Veranstaltungen bewährt und das Feedback der Teilnehmer war sehr positiv.

Nachvollziehbarer mit Lernportal

Für alle Veranstaltungen erstelle ich in einem Moodle Lernportal einen Kurs. Dieser ist in die einzelnen Lektionen unterteilt und dort finden sich alle notwendigen Informationen:
  • Folien der Lektion
  • Übungsaufgaben
  • Zugangsdaten zu den Schulungssystemen
  • Eine Liste mit offenen Fragen bzw. Themen, die auch von den Teilnehmern gepflegt werden kann
  • Zugangscodes zu den E-Books
  • Anleitungen und How-To Dokumente
  • Aufzeichnungen der Veranstaltung
Das Lernportal ist auch nach der Veranstaltung für die Teilnehmer noch 3 Monate lang zugänglich.
 

Aufgezeichnet!

Alle Veranstaltungen können per Video aufgezeichnet werden. Voraussetzung ist natürlich, dass alle Teilnehmer damit einverstanden sind. Hinterher werden diese Aufzeichnungen dann geschnitten in Abschnitte von maximal 1-2 Stunden und bei den entsprechenden Lektionen im Lernportal hinterlegt. Damit ist es dann möglich, die Schulung Schritt für Schritt nachträglich noch mal nachzuvollziehen und bei Bedarf können einzelne Lektionen noch mal angesehen werden.

Bei den Feedbackumfragen geben über 80% der Teilnehmer an, dass sie vorhaben, später noch mal das Lernportal zu nutzen bzw. die Aufzeichnungen noch mal anzusehen.

E-Books und Hardcover

Alle Teilnehmer bekommen wie gehabt ein persönliches Exemplar von „SQLScript für SAP HANA (oder ein anderes, zum Thema passendes Buch) als Schulungsunterlage. Da fast jeder Teilnehmer im Homeoffice arbeitet, ist das auch eine logistische Herausforderung. Da hat es sich als praktisch erwiesen, wenn man zusätzlich noch die E-Book Version des Schulungsmaterials dazu nimmt. Damit ist trotz langer Postlaufzeiten gewährleistet, dass alle Teilnehmer das Buch pünktlich haben. Und es hat natürlich auch einen großen Mehrwert, weil man es überall mit dabei haben kann und man kann natürlich auch gut darin suchen. 
 

Mit Garantie und Support

Ich bin davon überzeugt, dass meine Kunden mit dem Online Angebot zufrieden sind. Wenn das nicht der Fall ist, können alle Teilnehmer kostenlos an einer der hoffentlich bald wieder stattfindenden Präsenzschulungen hier in Mannheim teilnehmen. Versprochen!

Und weil einem manchmal die wichtigen Fragen erst nach der Schulung einfallen, können alle Teilnehmer nach einer Schulung kostenlosen Support zu allen Fragen rund um das Schulungsthema in Anspruch nehmen. Melden Sie sich einfach über unser Support Portal und wir werden uns um Ihre Fragen kümmern. 

Fazit

Natürlich fehlt mir bei Online Schulungen immer ein bisschen der informelle, persönliche Kontakt zu den Teilnehmern, sei es beim Mittagessen oder in der Kaffeepause. Aber wenn man die Möglichkeiten des Internets nutzt, kann man Online Schulungen veranstalten, die genau so wertvoll und nützlich für die Teilnehmer sind wie Präsenzveranstaltungen. 

Die 2. Auflage von „SQLScript für SAP HANA“

Am 25. Mai 2020 erschien die 2., aktualisierte und erweiterte Auflage  der deutschen Ausgabe meines Buches SQLScript für SAP HANA im Rheinwerkverlag. Ich hätte beim Erscheinen der ersten Auflage im September 2018 nie gedacht, dass die Nachfrage so groß sein wird, dass eine 2. Auflage notwendig sein wird.

Ebenfalls nicht erwartet hatte ich, dass sich mein Geschäft von der reinen Beratung und Entwicklung immer mehr in Richtung Training und Coaching verschiebt. Aber die Nachfrage nach qualitativen Schulungen im Bereich SQLScript und SAP HANA Technologien ist nach wie vor groß. Und das positive Feedback meiner Teilnehmer hat mich dazu ermutigt, jetzt überwiegend Schulungen zu machen. Vielen Dank für die vielen positiven Rückmeldungen!

Und so kam es, dass ich selber mit der größte Abnehmer meiner eigenen Bücher wurde. Mittlerweile müssten das fast 250 Exemplare gewesen sein, die ich an meine Schulungsteilnehmer übergeben habe.

Was ist neu in der 2. Auflage

Seit Ende letztem Jahres habe ich an den Ergänzungen und Aktualisierungen für die 2. Auflage von SQLScript für SAP HANA geschrieben. In den letzten zwei Servicepacks sind viele spannende Features zur Sprache SQLScript hinzugekommen, von denen ich einige unbedingt in die neue Auflage einbringen wollte.

Für ein paar davon habe ich auch schon Blog-Artikel geschrieben:

Die anderen Themen seien hier nur kurz aufgelistet. So wie ich ausreichend Zeit dafür finde, werde ich auch für diese etwas mehr schreiben:

  • Lateral Join – Die Bezeichnung Lateral Join ist etwas irreführend, da es sich nicht um eine weitere Join-Art handelt, wie z. B. Inner Join oder Left Outer Join. Vielmehr handelt es sich beim Lateral Join um einen Join, bei dem der Join-Partner eine korrelierte Unterabfrage oder eine Funktion ist. Sie können sich einen Lateral Join so vorstellen, dass die Unterabfrage für jede Zeile des bisherigen Ergebnisses separat ausgeführt wird. Es ist möglich, auf die Daten der aktuellen Zeile über den Korrelationsnamen zuzugreifen.
  • Die Bibliothek SQLSCRIPT_STRING bietet zusätzliche Funktionen, um Zeichenketten zu Verarbeiten:
    • Mit SPLIT kann man eine Zeichenkette an Trennzeichen in mehrere kleine Abschnitte zerlegen
    • Mit FORMAT kann man eine Zeichenkette mit einer Syntax aus der Sprache Python formatieren
    • Und mit TABLE_SUMMARY kann man aus einer Tabelle eine Zeichenkette machen
  • Mit der ABAP BASIS 7.53 sind skalare AMDP Funktionen möglich. Das ist gerade für die BW/4HANA Routinenentwicklung sehr wichtig, da diese bislang nicht möglich waren.
  • Mit den Funktionen SERIES_GENERATE_ können Datenreihen erzeugt werden. Das ist insbesondere für Datumswerte sehr praktisch.

Und natürlich sind noch unzählige kleinere Ergänzungen und Korrekturen enthalten. Beispielsweise wurden viele Screenshots der BW Oberflächen in der SAP GUI durch die neuen BW/4HANA Oberflächen in Eclipse ersetzt.

Insgesamt ist der Gesamtumfang der 2. Auflage von SQLScript für SAP HANA um 38 Seiten gewachsen. Der Aufwand für das Buchprojekt ist mal wieder viel höher gewesen als ursprünglich geplant. Aber das Ergebnis kann sich sehen lassen.

Online Training: Window Functions in SQLScript

Online Seminar: Window Functions in SQLScript

Dieses Seminar wird am Freitag, 27.März um 14:00Uhr live, kostenlos und in Farbe durchgeführt. Wenn Sie sich rechts Anmelden, bekommen Sie die Zugangsdaten rechtzeitig zugeschickt. 

Inhalt

Dieses Seminar behandelt die Grundlagen der Window Functions in SQLScript, dem SQL-Dialekt der SAP HANA Datenbank. Die sogenannten Window Functions sind immer dann hilfreich, wenn wir in ABAP mit dem Gruppenwechsel arbeiten, oder wenn wir uns in einem LOOP den Wert aus dem vorherigen Schleifendurchlauf merken wollen. 

Erforderliche Vorkenntnisse

Grundlagen von SQL sollten Sie für diese Schulung mitbringen. Ein Verständnis für die Aggregat-Funktionen wie z.B. SUM( ) oder AVG( ) ist hilfreich. 

Ablauf

Das Seminar wird über ZOOM durchgeführt. Dabei können bis zu 100 Teilnehmer live dabei sein. Neben meinen Folien und Demos sind auch Übungen geplant. Diese werden in sogenannten Breakout Sessions als kleine Gruppe mit 2-3 Teilnehmern durchgeführt. Jede Gruppe benötigt den Zugang zu der SQL-Konsole von einem SAP HANA System, und die Berechtigung darauf auch eine Tabellen anlegen zu dürfen. 

Gut geeignet sind zum Beispiel die kostenlosen Systeme der SAP Cloud Platform. Eine Anleitung zum Anlegen eines Systems finden Sie auf der rechten Seite.

Schulungsmaterial

 

Anleitung für das Anlegen eines kostenlosen HANA Systems auf der SAP Cloud Platform

Download der Anleitung

HowTo – SCP_HANA_System_anlegen_2020

Webinar SQLScript Online Seminare

Webinar: SQLScript Online Seminare - Di, 24.März 2020 um 14:00Uhr

Auf Grund der aktuellen Lage sind Präsenzschulungen leider nicht mehr möglich. Als Alternative bieten sich Online Seminare an. Diese sind eine gute Lösung, sowohl als Ersatz für offene Schulungen hier in Mannheim, als auch für Inhouse-Seminare.

In diesem Webinar möchte ich Ihnen zeigen, wie das Lernen einer Programmiersprache Homeoffice effektiv funktionieren kann. 

Natürlich kann man das Format einer Präsenzschulung nicht 1:1 auf ein Online-Seminar übertragen. Statt dessen versuche ich, die Möglichkeiten der Online Seminare und der Konferenzsoftware optimal zu nutzen. In diesem Webinar werden Sie eine halbe Stunde in die Rolle eines Seminarteilnehmers einnehmen und können

In dem Webinar möchte ich aber auch von den Teilnehmern Feedback bekommen. Denn Sie haben sicherlich auch schon an Online Veranstaltungen gemacht. Was hat Ihnen besonders gut gefallen? Und was ist vielleicht nicht so gut gelaufen? 

Ich freue mich auf Ihre Teilnahme an dem Webinar!

 

Jörg Brandeis

4. HANA Tech Night am 10.2.2020

Im Februar ist es wieder soweit. Am Vorabend der DSAG Technologietage 2020 findet die 4. HANA Tech Night hier in Mannheim statt. Wir konnten für diese Veranstaltung drei Sessions mit sehr interessanten Themen gewinnen:

  • What’s new in SAP Cloud Platform ABAP Environment (aka. Steampunk) 2002 – by Andre Fischer
  • Unleash the Beast – Bringing ABAP and SQLScript together – by Soeren Schlegel
  • Location Analytics with SAP HANA Spatial – by Mathias Kemeter

Neben dem spannenden Programm spielt natürlich auch das Socializing eine große Rolle. Nach und zwischen den Vorträgen ist genügend Zeit, um sich bei einer Pizza und einem Glas Bier über die Themen auszutauschen.

Anmeldung ist kostenlos und erfolgt über das Meetup Event „4. HANA Tech Night“.

Weitere Details gibt es auf der SCN Seite zur HANA Tech Night 2020.

SQLScript Unit Tests, das End-User Test Framework

Mit der Version 2.0 SPS04 der SAP HANA Datenbank wurde das sogenannte „End-User Test Framework in SQLScript“ eingeführt. Damit ist es möglich, SQLScript Unit Tests in Form von Benutzerdefinierte Bibliotheken (UDL) zu erstellen. Diese können dann mit dem Aufruf der Prozedur SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA automatisch ausgeführt werden.

Was wird getestet?

Meistens werden Testfälle verwendet, um für ein Unterprogramm zu prüfen, ob bei einer vorgegebenen Eingabe auch die erwartete Ausgabe erzeugt wird. Im Falle von Datenbanken handelt es sich also um Prozeduren und Funktionen, die vornehmlich getestet werden. Es lässt sich aber auch der Zustand der Datenbank testen, in dem wir beispielsweise die Anzahl der Datensätze in einer Tabelle abfragen. So können wir bei dem folgenden Beispiel prüfen, ob die Skripte für das Demo Datenmodell erfolgreich waren, und die erwartete Anzahl von Datensätzen generiert haben.

Beispiel

Um das Konzept des Test Framework zu erläutern, starten wir mit einem einfachen Beispiel. Im Listing 1.2 finden Sie eine Testbibliothek, die wirklich nur das Nötigste enthält. Sie besteht nur aus einer Testprozedur T_AUFGABEN_CNT. Diese prüft, ob in der Tabelle AUFGABEN genau 1000 Einträge enthalten sind.

CREATE LIBRARY test_demo_dm 
LANGUAGE SQLSCRIPT TEST 
AS BEGIN 

  @test()
  PUBLIC PROCEDURE t_aufgaben_cnt 
  AS BEGIN
    USING sqlscript_test AS test;
    test:expect_eq((SELECT COUNT(*) FROM aufgaben),
                     1000 );
  END;    
END;

Um diesen SQLScript Unit Test in unserer Testbibliothek auszuführen, rufen wir in der SQL-Konsole die folgende Prozedur auf. Gegebenenfalls müssen Sie den Namen des Schemas anpassen:

CALL SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA('{"schema":"SYSTEM",
                          "library":"TEST_DEMO_DM"}', ?, ?, ?);

Das Ergebnis dieses Prozeduraufrufes sind 3 Tabellen. In unserem Falle ist nur in der Ersten auch tatsächlich ein Eintrag vorhanden, weil der Test erfolgreich war. Sobald ein Test scheitert, wird in der 2. Tabelle eine Meldung ausgegeben und die 3. Tabelle enthält Details zum Call-Stack der Fehler. Weiter unten ist ein Beispiel für die Ausgegebenen Tabellen

Die Sprache der Tests

Als erstes fällt an dem kleinen Beispiel auf, dass die Bibliothek mit der Sprache SQLSCRIPT TEST angelegt wird. Damit werden Testbibliotheken von produktiven Bibliotheken unterschieden. Tatsächlich handelt es sich bei der Implementierung der Test aber auch um SQLScript.

Pragmas für Prozeduren

Um die einzelnen Prozeduren der Testbibliotheken zu klassifizieren, werden Pragmas eingesetzt. Die wichtigste Rolle spielen die die parameterlosen Testprozeduren. Diese werden durch ein vorangestelltes Pragma @test() markiert.

Um einen definierten Systemzustand vor dem Test herzustellen, kann mit dem Pragma @TestSetUpLibrary() eine entsprechende Prozedur markiert werden.

Nach der Ausführung der Tests wird gegebenenfalls die Prozedur mit dem Pragma @TestTearDownLibrary() aufgerufen, um nach den Testprozeduren wieder aufzuräumen.

Prüfprozeduren

Innerhalb der Testprozeduren können mit Hilfe der Prüfprozeduren der Bibliothek SQLSCRIPT_TEST die Zustände des Programms verifiziert werden. Die unterschiedlichen Prüfprozeduren finden Sie in Tabelle 1.1. Als Parameter Wert 1 bzw. 2 kann jeder beliebiger skalarer Ausdruck verwendet werden.

Prüfprozedur Beschreibung
EXPECT_EQ(<Wert1>, <Wert2>) Prüft, ob beide Werte gleich sind
EXPECT_NE(<Wert1>, <Wert2>) Prüft, ob die beiden Werte unterschiedlich sind
EXPECT_GE(<Wert1>, <Wert2>) Prüft, ob Wert 1 grösser oder gleich dem Wert 2 ist
EXPECT_GT(<Wert1>, <Wert2>) Prüft, ob Wert 1 grösser als Wert 2 ist
EXPECT_LE(<Wert1>, <Wert2>) Prüft, ob Wert 1 kleiner oder gleich dem Wert 2 ist
EXPECT_LT(<Wert1>, <Wert2>) Prüft, ob Wert 1 kleiner als Wert 2 ist
EXPECT_NULL(<Wert>) Prüft, ob der Wert NULL ist
EXPECT_TABLE_EQ(<Tabelle1>, <Tabelle2>[,<Reihenfolge ignorieren>]) Prüft, ob die beiden Tabellen identisch sind. Die Reihenfolge spielt keine Rolle, solange nicht das entsprechende Flag auf FALSE gesetzt wird.
FAIL(<Nachricht>) Der Test wird auf gescheitert gesetzt und die Nachricht wird ausgegeben

Modularisierung in der Testbibliothek

Diese Prüfprozeduren unserer SQLScript Unit Tests müssen nicht direkt in der Testprozedur aufgerufen werden. Es kann innerhalb der Testbibliothek auch weiter modularisiert werden. Wenn beispielsweise mehrere Tabellen auf die Anzahl der enthaltenen Datensätze überprüft werden sollten, so bietet es sich an, diesen Teil des Codes in eine separate Prozedur auszulagern, um unnötige Wiederholungen zu vermeiden.

In Listing 1.3 wurde die Logik, um die Anzahl der Datensätze innerhalb einer Tabelle zu prüfen, in eine private Prozedur ausgelagert. Damit ist es ein Leichtes, auch sehr viele Tabellen zu prüfen, ohne dass man den gleichen Code jedes Mal wiederholen muss.

CREATE LIBRARY TEST_DEMO_DM 
LANGUAGE SQLSCRIPT TEST 
AS BEGIN 
  
  PRIVATE PROCEDURE check_table_count
    (IN iv_tabname NVARCHAR(30),
     IN iv_expected_count INTEGER)
  AS BEGIN
    USING sqlscript_test AS test;
    DECLARE lv_query NVARCHAR(5000);
    DECLARE lv_count INTEGER;
    
    lv_query = 'SELECT COUNT(*) FROM ' || :iv_tabname;
    EXEC lv_query INTO lv_count;
    test:expect_eq( :lv_count, :iv_expected_count );
      
  END;
  
  @test()
  PUBLIC PROCEDURE t_table_count 
  AS BEGIN
      check_table_count( 'AUFGABEN', 1000);
      check_table_count( 'BENUTZER', 30);
      check_table_count( 'STATUS', 6); 
      check_table_count( 'STATUS_TEXT', 12);
    --check_table_count( 'STATUS_TEXT', 13);
  END;     
END;

Testergebnis

Wenn wir die obige Testbibliothek ausführen und alles richtig gemacht haben, dann werden wir keine Fehlermeldung erhalten. Zur Demonstration habe ich die Parameter für die Tabelle STATUS_TEXT verändert. Das Ergebnis der drei Rückgabetabellen des Tests sehen Sie in den folgenden drei Abbildungen. Die erste Tabelle zeigt uns, dass die Testprozedur in der Testbibliothek mit dem Ergebnis FAILED ausgeführt wurde:

Ergebnis der Testausführung

In der zweiten Tabellen finden wir den Grund für den Fehler. In unserem Falle stimmt die Anzahl der Datensätze nicht.

Fehlermeldungen der Testausführung

Die dritte Tabelle liefert jetzt den zugehörigen Call Stack.

Call Stack der gemeldeten Fehler

Weiterführende Konzepte

Neben diesen grundlegenden Konzepten gibt es auch noch die Möglichkeit, mit Hilfe von sogenannten Konfigurationen unterschiedliche Vorbedingungen für die Testprozeduren zu erstellen.

Die Testprozeduren wiederum können durch eine Klassifizierung in Gruppen eingeteilt werden.

Beim Aufruf der Prozedur SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA kann man ein JSON Dokument mitgeben, dass im Detail festlegt, welche Prozeduren mit welchen Klassifikationen in welche Konfigurationen ausgeführt werden sollen.  

Diese Details finden Sie in der Referenzdokumentation SAP HANA SQLScript Reference for SAP HANA Platform.

Bewertung

Mit dem Test Framework haben wir jetzt ein sehr nützliches Instrument in der Hand, mit dem wir unsere Programme auf der Ebene der Datenbank automatisiert testen können. Die Erstellung von Unit Tests ist mittlerweile weit verbreiteter Standard, der somit auch für SQLScript Entwicklungen anwendbar ist. Auch die Testgetriebene Entwicklung (TDD) ist mit dem Framework möglich.

Wollen Sie mehr Informationen?

Unverbindliche Anfrage