Ansicht
Dokumentation

ABENCALL_HANA_DB_PROC_ABEXA - CALL HANA DB PROC ABEXA

ABENCALL_HANA_DB_PROC_ABEXA - CALL HANA DB PROC ABEXA

BAL_S_LOG - Application Log: Log header data   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

SAP HANA, Datenbankprozedur aufrufen

Das Beispiel demonstriert, wie eine Datenbankprozedur der SAP-HANA-Datenbank aufgerufen werden kann.

Quelltext

Ausführen

Beschreibung

Gegeben sei eine Datenbankprozedur namens /1BCAMDP/DEMO_ADBC_GET_FLIGHTS im ABAP-Datenbankschema:

begin
  FLIGHTS =
    select *
           from SFLIGHT as S
           where exists (
                  select MANDT, CARRID, CONNID
                  from :CONNECTIONS as C
                  where C.MANDT  = S.MANDT and
                        C.CARRID = S.CARRID and
                        C.CONNID = S.CONNID );
end

Die Prozedur hat einen tabellarischen Eingabeparameter CONNECTIONS vom dreispaltigen HANA-Tabellentyp DEMO_ADBC_CONNECTIONS_TYPE und einen Ausgabeparameter FLIGHTS vom im ABAP Dictionary definierten Typ SFLIGHT. Der HANA-Tabellentyp hat drei zeichenartige Spalten MANDT der Länge 3, CARRID der Länge 3 und CONNID der Länge 4. Die Aufgabe besteht darin, diese Prozedur aus ABAP aufzurufen, wobei eine interne Tabelle an den Eingabeparameter zu übergeben und der Ausgabeparameter in eine interne Tabelle zu übernehmen ist.

Das Beispielprogramm ruft hierfür verschiedene Methoden der Klasse CL_DEMO_CALL_HANA_DB_PROCEDURE auf. Im Instanzkonstruktor der Klasse wird die zu übergebende Tabelle connection_tab gemäß einer Benutzereingabe gefüllt. Weiterhin werden dort die Datenbankprozedur, der HANA-Tabellentyp und ein Datenbankprozedur-Proxy, die in der Regel statisch vorhanden sind, temporär angelegt.

Vergleichsimplementierung mit

Die Methode OSQL zeigt, wie die Implementierung der Datenbankprozedur auch in ausgedrückt werden kann. Wenn die Funktionalität nur in ABAP benötigt wird, ist eine Implementierung in SQLScript in diesem Fall also nicht notwendig und sollte gemäß der zugehörigen Programmierrichtlinie vermieden werden. In unserem Beispiel steht die Datenbankprozedur stellvertretend für eine allgemein verwendbare ausgelieferte Prozedur, die auch in ABAP aufgerufen werden soll. Das Ergebnis der Methode OSQL wird mit den Ergebnissen der verschiedenen Prozeduraufrufe verglichen, um deren Korrektheit festzustellen.

Aufruf mit Native SQL über ADBC

Die Methode ADBC verwendet Native SQL über ADBC, um die Datenbankprozedur aufzurufen. Um die interne Tabelle connection_tab an die Datenbankprozedur zu übergeben, wird eine temporäre Tabelle DEMO_ADBC_CONNECTIONS vom benötigten Typ DEMO_ADBC_CONNECTIONS_TYPE auf der Datenbank angelegt und diese über die Anweisung insert mit den Werten der internen Tabelle versorgt. Danach wird die Datenbankprozedur mit der temporären Tabelle als Eingabeparameter aufgerufen und das Ergebnis einer ADBC-Ergebnismenge zugewiesen. Für das Auslesen aus der Ergebnismenge wird eine Standardtabelle flights_std als Hilfstabelle benötigt, da der Rückgabewert flights eine sortierte Tabelle ist, die nicht für ADBC verwendet werden kann. Die temporäre Tabelle DEMO_ADBC_CONNECTIONS wird nach dem Aufruf der Datenbankprozedur wieder entfernt.

Aufruf über Datenbankprozedur-Proxy

Die Methode CDBP ruft die Datenbankprozedur mit der Anweisung CALL DATABASE PROCEDURE über das zugeordnete Datenbankprozedur-Proxy DEMO_ADBC_GET_FLIGHTS_PROXY auf. Als einzige Besonderheit ist hier zu beachten, dass Eingabeparameter und Ausgabeparameter der Datenbankprozedur andere Zeilentypen als die internen Tabellen haben, die ihnen zugeordnet werden sollen. Die Spalte CONNID hat in beiden Fällen auf der Datenbank den Typ NVARCHAR(4), in ABAP aber den Typ n der Länge 4. Deshalb wird die interne Tabelle connection_tab vor dem Aufruf der Prozedur erst an eine temporäre Tabelle connections zugewiesen, die den richtigen Zeilentyp hat. Für das Ergebnis flights muss keine Hilfstabelle eingeführt werden, da der Zeilentyp durch einen Typ im ABAP Dictionary beschrieben wird, für den über die Mapping-Tabelle params ein entsprechendes Mapping ausgeführt werden kann. Alternativ zur Hilfstabelle für connection_tab könnte deren Datentyp auch im ABAP Dictionary deklariert und ein solches Mapping durchgeführt werden.

Die Anweisung CALL DATABASE PROCEDURE ist auf einer SAP-HANA-Cloud-Datenbank nicht möglich.

Aufruf über AMDP

Die Methode AMDP ruft die AMDP-Methode AMDP_METH auf, in welcher ein Aufruf der Datenbankprozedur in SQLScript implementiert ist. In diesem Fall werden alle notwendigen typabhängigen Umsetzungen vom AMDP-Framework durchgeführt.






ABAP Short Reference   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 7459 Date: 20240523 Time: 173553     sap01-206 ( 130 ms )