Ansicht
Dokumentation

ABAPCALL_DATABASE_PROCEDURE - CALL DATABASE PROCEDURE

ABAPCALL_DATABASE_PROCEDURE - CALL DATABASE PROCEDURE

TXBHW - Original Tax Base Amount in Local Currency   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

CALL DATABASE PROCEDURE

Kurzreferenz



CALL DATABASE PROCEDURE
    ${  proxy       $[CONNECTION con$|(con_syntax)$] parameter_list $}
  $| ${ (proxy_name) $[CONNECTION con$|(con_syntax)$] ${ parameter_list
$|parameter_table$} $}.


Zusatz:

... CONNECTION con$|(con_syntax)

Wirkung

Diese Anweisung ruft eine in SQLScript geschriebene Datenbankprozedur (SQLScript-Prozedur) auf einer SAP-HANA-Datenbank auf.

  • Ohne den Zusatz CONNECTION ist die Anweisung nur in einem System mit SAP-HANA-Datenbank möglich.
  • Mit dem Zusatz CONNECTION kann die Anweisung in jedem System mit einer Sekundärverbindung zu einer SAP-HANA-Datenbank ausgeführt werden.

Die SQLScript-Prozedur wird über ein für sie definiertes Datenbankprozedur-Proxy angegeben. Das Proxy kann wie folgt angegeben werden:

  • proxy
Direkte statische Angabe als proxy.
  • (proxy_name)
Angabe als großbuchstabiger Inhalt eines eingeklammerten zeichenartigen Datenobjekts proxy_name. Es können folgende Angaben für proxy_name unterschieden werden:
  • Literal oder Konstante

Wenn das Datenobjekt proxy_name als Zeichenliteral oder als Konstante angegeben ist, kann es statisch ausgewertet werden und das angegebene Proxy wird als verwendetes Objekt erkannt.
  • Variable

Wenn das Datenobjekt proxy_name als Variable angegeben ist, ist dies eine rein dynamische Angabe und es findet keine statische Auswertung des Inhalts statt.
Bei Ausführung der Anweisung wird proxy_name in beiden Fällen erst zur Laufzeit ausgewertet.

Die Aktualparameter für die Ein- und Ausgabeparameter der Prozedur werden entweder statisch über parameter_list oder dynamisch über parameter_table angegeben.

Hinweise

  • Die Namen von Datenbankprozedur-Proxy und Datenbankprozedur-Interface sind frei wählbar. In der Regel hat das Datenbankprozedur-Interface den Namen des Datenbankprozedur-Proxies mit vorangestelltem Präfix IF_, zuzüglich eventuellem Namensraumpräfix.
  • Ob die aktuelle Datenbank Datenbankprozedur-Proxies unterstützt kann über die Konstante CALL_DATABASE_PROCEDURE der Klasse CL_ABAP_DBFEATURES abgefragt werden.
  • ABAP Managed Database Procedures (AMDP) stellen eine empfohlene Alternative zur Anweisung CALL DATABASE PROCEDURE dar, wenn die Standarddatenbank des AS ABAP eine SAP-HANA-Datenbank ist. Aus AMDP können beliebige Datenbankprozeduren der Standarddatenbank aufgerufen werden, was die Verwendung von Datenbankprozedur-Proxies überflüssig macht, solange nicht über eine Sekundärverbindung auf eine andere SAP-HANA-Datenbank zugegriffen werden soll.
  • Für SQLScript-Prozeduren der SAP HANA XSA können keine Datenbankprozedur-Proxies angelegt werden. Statt dessen müssen andere Mittel wie AMDP oder ADBC verwendet werden.
  • Auf einer SAP-HANA-Cloud-Datenbank können keine Datenbankprozedur-Proxies verwendet werden. Mit der Methode CL_SHDB_HC=>IS_HANA_CLOUD kann überprüft werden, ob die aktuelle Datenbank eine SAP-HANA-Cloud-Datenbank ist.

Zusatz

... CONNECTION con$|(con_syntax)

Wirkung

Die SQLScript-Prozedur wird nicht auf der Standardverbindung, sondern auf der angegebenen Sekundärverbindung ausgeführt. Die Datenbankverbindung kann statisch mit con oder dynamisch als Inhalt von con_syntax angegeben werden, wobei das Feld con_syntax vom Typ c oder string sein muss. Die Datenbankverbindung muss mit einem Namen angegeben werden, der in der Tabelle DBCON in der Spalte CON_NAME enthalten ist oder mit dem Präfix R/3* beginnt und damit für eine Serviceverbindung zur Standarddatenbank steht.

Hinweise

  • Das angegebene Datenbankprozedur-Proxy für die Datenbankprozedur der Sekundärverbindung muss auf dem aktuellen System vorhanden sein.
  • Das Anlegen und Ändern von Einträgen in der DDIC-Datenbanktabelle DBCON sollte nur mit dem Werkzeug DBA Cockpit erfolgen.
  • Die Verwendung von CALL DATABASE PROCEDURE mit dem Zusatz CONNECTION ist für alle Szenarien sinnvoll, in denen vorhandene Datenbankprozeduren in einer SAP-HANA-Datenbank verwendet werden sollen, die nicht die Standarddatenbank des aktuellen AS ABAP ist (Side-by-Side-Szenario).

Beispiel

SQLScript-Prozedur

Gegeben sei folgende SQLScript-Prozedur:

/********* Begin Procedure Script ************/
BEGIN
  out_items = select items.pos,
                     items.first_name,
                     items.last_name,
                     items.posting_date as date,
                     items.currency,
                     items.amount
                from zngd_items as items
                inner join :in_sel as sel
                 on ( items.first_name = sel.first_name and
                      items.last_name  = sel.last_name )
               where posting_date = :in_date;
END;
/********* End Procedure Script ************/

Die Eingabeparameter sind:

Parameter Datenbanktyp
in_sel Table Data Type
in_date Scalar

Die Komponenten von in_sel sind:

Komponente Datenbanktyp
FIRST_NAME NVARCHAR, Length 20
LAST_NAME NVARCHAR, Length 20

Die Ausgabeparameter sind:

Parameter Datenbanktyp
out_items Table Data Type

Die Komponenten von out_items sind:

Komponente Datenbanktyp
POS INTEGER
FIRST_NAME NVARCHAR, Length 20
LAST_NAME NVARCHAR, Length 20
DATE INTEGER
CURRENCY NVARCHAR, Length 4
AMOUNT DECIMALS, Length 11, Scale 2

Datenbankprozedur-Proxy

Im zugehörigen Datenbankprozedur-Proxy ..._PROXY sei folgendes Mapping definiert:

Prozedurparameter ABAP-Name ABAP-Datentyp
IN_SEL IN_SEL Interne Tabelle
IN_SEL, FIRST_NAME IN_SEL, FIRST_NAME c, Länge 20
IN_SEL, LAST_NAME IN_SEL, LAST_NAME c, Länge 20
IN_DATE IN_DATE d
OUT_ITEMS, POS OUT_ITEMS, POS i
OUT_ITEMS, FIRST_NAME OUT_ITEMS, FIRST_NAME c, Länge 20
OUT_ITEMS, LAST_NAME OUT_ITEMS, LAST_NAME c, Länge 20
OUT_ITEMS, DATA OUT_ITEMS, POSTING_DATE d
OUT_ITEMS, CURRENCY OUT_ITEMS, CURRENCY c, Länge 4
OUT_ITEMS, AMOUNT OUT_ITEMS, AMOUNT p, Länge 6, 2 Nachkommastellen

Beachten Sie die Namens- und Typänderungen bei den Datumsfeldern.

Datenbankprozedur-Interface

Das Datenbankprozedur-Interface IF_..._PROXY wird mit folgenden Typdeklarationen generiert:

INTERFACE if_..._proxy PUBLIC.
  TYPES: BEGIN OF in_sel,
           first_name     TYPE c LENGTH 20,
           last_name      TYPE c LENGTH 20,
         END OF in_sel.
  TYPES: in_date          TYPE d.
  TYPES: BEGIN OF out_items,
           pos  TYPE i,
           first_name     TYPE c LENGTH 20,
           last_name      TYPE c LENGTH 20,
           posting_date   TYPE d,
           currency       TYPE c LENGTH 4,
           amount         TYPE p LENGTH 6 DECIMALS 2,
         END OF out_items.
ENDINTERFACE.

Datenbankprozedur-Aufruf

Der folgende ABAP-Programmabschnitt ruft die SQLScript-Prozedur über den Namen des Datenbankprozedur-Proxies auf, wobei über das Datenbankprozedur-Interface typisierte Aktualparameter verwendet werden.

DATA:
  in_date   TYPE if_..._proxy=>in_date,
  in_sel    TYPE STANDARD TABLE
                 OF if_..._proxy=>in_sel
                 WITH EMPTY KEY,
  out_items TYPE STANDARD TABLE
                 OF if_..._proxy=>out_items
                 WITH EMPTY KEY.

in_date = '20120329'.
in_sel = VALUE #( ( first_name = 'Dolores'    last_name = 'Oh' )
                  ( first_name = 'Benjacomin' last_name = 'Bozart' )
                  ( first_name = 'Johanna'    last_name = 'Gnade' ) ).

IF cl_abap_dbfeatures=>use_features(
      EXPORTING
        requested_features =
          VALUE #( ( cl_abap_dbfeatures=>call_database_procedure ) ) )
   AND NOT cl_shdb_hc=>is_hana_cloud( ).
  CALL DATABASE PROCEDURE ..._proxy
     EXPORTING in_date   = in_date
               in_sel    = in_sel
     IMPORTING out_items = out_items.
ENDIF.


Im Beispiel Datenbankprozeduraufruf wird eine über ADBC erzeugte SQLScript-Prozedur über ein programmatisch erzeugtes Datenbankprozedur-Proxy aufgerufen.

Ausnahmen

Behandelbare Ausnahmen

Bis auf CX_SY_DB_PROCEDURE_SQL_ERROR sind alle der folgenden Ausnahmeklassen Unterklassen der abstrakten Oberklasse CX_SY_DB_PROCEDURE_CALL.

CX_SY_DB_PROCEDURE_SQL_ERROR

  • Ursache: Fehler auf der Datenbank bei der Ausführung einer SQLScript-Funktion.
    Laufzeitfehler: DBPROC_SQL_ERROR

CX_SY_DB_PROCEDURE_CONNECTION

  • Ursache: Die angegebene Sekundärverbindung wurde nicht in der DDIC-Datenbanktabelle DBCON gefunden.
    Laufzeitfehler: DBPROC_CONNECTION

CX_SY_DB_PROCEDURE_NOT_FOUND

  • Ursache: Das angegebene Datenbankprozedur-Proxy ist nicht vorhanden.
    Laufzeitfehler: DBPROC_PROXY_NOT_FOUND

CX_SY_DB_PROCEDURE_NOT_SUPP

  • Ursache: Die verwendete Datenbank unterstützt kein SQLScript.
    Laufzeitfehler: CALL_DATABASE_NOT_SUPPORTED

CX_SY_DB_PROCEDURE_OVERFLOW

  • Ursache: Der Wertebereich eines Parameters wurde überschritten.
    Laufzeitfehler: DBPROC_OVERFLOW

CX_SY_DB_PROCEDURE_PARAMETER

  • Ursache: Es trat eine der folgenden Ausnahmen auf (abstrakte Oberklasse).
Ursache: Ein- und Ausgabeparameter wurden beim dynamischen Aufruf vertauscht.
Laufzeitfehler: DBPROC_DYNAMIC_IN_OUT1, DBPROC_DYNAMIC_IN_OUT2
Ursache: Für einen Formalparameter fehlt beim dynamischen Aufruf ein Aktualparameter.
Laufzeitfehler: DBPROC_DYNAMIC_MISSING
Ursache: Falsche Angabe eines Formalparameters beim dynamischen Aufruf.
Laufzeitfehler: DBPROC_DYNAMIC_NOT_FOUND
Ursache: Unpassender Typ eines Aktualparameters beim statischen oder dynamischen Aufruf.
Laufzeitfehler: DBPROC_ILLEGAL_TYPE, DBPROC_DYNAMIC_NO_SCALAR, DBPROC_DYNAMIC_NO_TABLE

Unbehandelbare Ausnahmen

  • Ursache: Die Spalte KIND der Parametertabelle ptab enthält einen ungültigen Wert.
    Laufzeitfehler: DBPROC_DYNAMIC_UNKNOWN_KIND
  • Ursache: Die Spalte KIND der Parametertabelle ptab enthält den Wert "C" für Ein-/Ausgabeparameter, was derzeit noch nicht unterstützt wird.
    Laufzeitfehler: DBPROC_DYNAMIC_NO_INOUT
  • Ursache: Der einem Ausgabeparameter zugeordnete Aktualparameter ist nicht änderbar.
    Laufzeitfehler: DBPROC_OUT_NOT_WRITABLE





General Data in Customer Master   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 26249 Date: 20240419 Time: 071449     sap01-206 ( 79 ms )