Ansicht
Dokumentation
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.
CALL DATABASE PROCEDURE
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.
- Ursache: Fehler auf der Datenbank bei der Ausführung einer SQLScript-Funktion.
Laufzeitfehler: DBPROC_SQL_ERROR
- Ursache: Die angegebene Sekundärverbindung wurde nicht in der DDIC-Datenbanktabelle DBCON gefunden.
Laufzeitfehler: DBPROC_CONNECTION
- Ursache: Das angegebene Datenbankprozedur-Proxy ist nicht vorhanden.
Laufzeitfehler: DBPROC_PROXY_NOT_FOUND
- Ursache: Die verwendete Datenbank unterstützt kein SQLScript.
Laufzeitfehler: CALL_DATABASE_NOT_SUPPORTED
- Ursache: Der Wertebereich eines Parameters wurde überschritten.
Laufzeitfehler: DBPROC_OVERFLOW
- 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 )