Ansicht
Dokumentation
ABENCDS_CAST_EXPRESSION_V1 - CDS CAST EXPRESSION V1
ABAP Short Reference ABAP Short ReferenceDiese Dokumentation steht unter dem Copyright der SAP AG.
- DDIC-basierte View, cast_expr
... CAST( operand AS dtype $[PRESERVING TYPE$]) ...
Wirkung
Cast (Typanpassung) in einer SELECT-Anweisung einer . Der Cast-Ausdruck konvertiert den Wert des Operanden operand in den durch dtype angegebenen ABAP Dictionary-Typ. Das Ergebnis ist vom Typ dtype. Für dtype kann angegeben werden:
- Ein DDIC-Datenelement. In diesem Fall kann der optionale Zusatz PRESERVING TYPE angegeben werden. Bei Angabe des Zusatzes müssen der eingebaute Datentyp, die Länge und die Anzahl der Nachkommastellen von Operand und Zieldatentyp genau übereinstimmen.
- Ein eingebauter Datentyp des ABAP Dictionary. In diesem Fall ist der Zusatz PRESERVING TYPE nicht möglich.
Die folgende Tabelle zeigt die Syntax zur Angabe der eingebauten Datentypen:
dtype | Dictionary-Typ |
abap.char( len ) | CHAR der Länge len |
abap.clnt$[(3)$] | CLNT |
abap.cuky$[(5)$] | CUKY |
abap.curr(len,decimals) | CURR der Länge len mit decimals Nachkommastellen |
abap.decfloat16$[(16)$] | DECFLOAT16 |
abap.decfloat34$[(34)$] | DECFLOAT34 |
abap.dats$[(8)$] | DATS |
abap.datn$[(8)$] | DATN |
abap.dec(len,decimals) | DEC der Länge len mit decimals Nachkommastellen |
abap.fltp$[(16,16)$] | FLTP |
abap.int1$[(3)$] | INT1 |
abap.int2$[(5)$] | INT2 |
abap.int4$[(10)$] | INT4 |
abap.int8$[(19)$] | INT8 |
abap.lang$[(1)$] | LANG |
abap.numc( len ) | NUMC der Länge len |
abap.quan(len,decimals) | QUAN der Länge len mit decimals Nachkommastellen |
abap.sstring(len) | SSTRING |
abap.tims$[(6)$] | TIMS |
abap.timn$[(6)$] | TIMN |
abap.unit$[(2$|3)$] | UNIT der Länge 2 oder 3 (Standardlänge) |
abap.utclong$[(27)$] | UTCLONG |
Die tatsächliche Länge des Ergebnisses wird bei der Aktivierung der CDS-View festgelegt und ist mindestens so groß wie eine explizit angegebenen Länge len. Für Typen mit festen Längen und Nachkommastellen kann die Länge angegeben werden, muss aber nicht.
Für operand können angegeben werden:
- Ein Literal ohne vorangestellte Domäne
- Ein Parameter
- Eine Sitzungsvariable
- Ein Feld einer Datenquelle data_source der aktuellen CDS-View
- Ein Aggregatausdruck
- Ein Pfadausdruck, der ein Feld einer Datenquelle data_source bezeichnet
- Eine eingebaute Funktion
- Eine Fallunterscheidung mit CASE
- Einen geschachtelten Cast-Ausdruck
Cast-Ausdrücke können in der SELECT-Liste und an Operandenpositionen von Ausdrücken angegeben werden.
Die folgende Tabelle zeigt die Kombinationen eingebauter Datentypen des ABAP Dictionary, die derzeit ineinander gecasted werden können, und die entsprechenden Voraussetzungen. Zu jeder Kombination gibt es gesondert aufgeführte Konvertierungsregeln.
von/nach | INT1 | INT2 | INT4 | INT8 | DEC | CURR | QUAN | DECFLOAT16 | DECFLOAT34 | FLTP | CHAR | SSTRING | NUMC | DATS | TIMS | DATN | TIMN | UTCLONG | ACCP | CLNT | LANG | UNIT | CUKY | RAW |
INT1 | x | x | x | x | x | x | x | x | x | x | y | y | - | - | - | - | - | - | - | x | - | - | - | - |
INT2 | x | x | x | x | x | x | x | x | x | x | y | y | - | - | - | - | - | - | - | - | - | - | - | - |
INT4 | x | x | x | x | x | x | x | x | x | x | y | y | - | - | - | - | - | - | - | - | - | - | - | - |
INT8 | x | x | x | x | x | x | x | x | x | x | y | y | - | - | - | - | - | - | - | - | - | - | - | - |
DEC | x | x | x | x | x | x | x | x | x | x | y | y | - | - | - | - | - | - | - | - | - | - | - | - |
CURR | x | x | x | x | x | x | x | - | - | x | y | y | - | - | - | - | - | - | - | - | - | - | - | - |
QUAN | x | x | x | x | x | x | x | x | x | x | y | y | - | - | - | - | - | - | - | - | - | - | - | - |
DECFLOAT16 | x | x | x | x | x | - | x | x | x | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
DECFLOAT34 | x | x | x | x | x | - | x | x | x | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
FLTP | - | - | - | - | - | - | - | - | - | x | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
CHAR | - | - | - | - | - | - | - | - | - | - | x | x | x | x | x | - | - | - | p | x | x | x | x | - |
SSTRING | - | - | - | - | - | - | - | - | - | - | x | x | x | x | x | - | - | - | p | x | x | x | x | - |
NUMC | y | y | y | y | x | x | x | x | x | x | x | x | z | z | z | - | - | - | p | z | - | - | - | - |
DATS | - | - | - | - | - | - | - | - | - | - | x | x | - | z | - | - | - | - | - | - | - | - | - | - |
TIMS | - | - | - | - | - | - | - | - | - | - | x | x | - | - | z | - | - | - | - | - | - | - | - | - |
DATN | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | x | - | - | - | - | - | - | - | - |
TIMN | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | x | - | - | - | - | - | - | - |
UTCLONG | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | x | - | - | - | - | - | - |
ACCP | - | - | - | - | - | - | - | - | - | - | z | z | z | - | - | - | - | - | p | - | - | - | - | - |
CLNT | - | - | - | - | - | - | - | - | - | - | d | d | - | - | - | - | - | - | - | p | - | - | - | - |
LANG | - | - | - | - | - | - | - | - | - | - | d | d | - | - | - | - | - | - | - | - | p | - | - | - |
UNIT | - | - | - | - | - | - | - | - | - | - | d | d | - | - | - | - | - | - | - | - | - | p | - | - |
CUKY | - | - | - | - | - | - | - | - | - | - | d | d | - | - | - | - | - | - | - | - | - | - | p | - |
RAW | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | p |
Bei Kombinationen mit "x" sind keine weiteren Einschränkungen zu beachten. Bei den übrigen Kombinationen gelten folgende Regeln:
- Bei Kombinationen mit "y" muss die Länge des Zieldatentyps ausreichend sein.
- Bei Kombinationen mit "z" müssen die Längen der Datentypen genau übereinstimmen.
- Bei Kombinationen mit "p" oder "d“ muss als Zieldatentyp ein Datenelement angegeben werden. Es ist nicht möglich, einen eingebauten Datentyp aus dem ABAP Dictionary anzugeben,
- Bei Kombinationen mit "d" kann das Datenelement einen passenden Zieltyp gemäß obiger Tabelle mit beliebiger Länge haben.
- Bei Kombinationen mit "p" muss das Datenelement den eingebauten Datentyp und die gleiche Länge wie der Datentyp des Operanden haben.
Bei inkompatiblen Typen wird der Inhalt des Operanden in den Zieltyp konvertiert, wobei es bei unpassenden Werten zu Ausnahmen kommen kann. Bei kompatiblen Typen kommt es zu einer Warnung von der Syntaxprüfung, es sei denn der Zieldatentyp ist als Datenelement mit dem Zusatz PRESERVING TYPE angegeben.
Hinweise
- Wenn für dtype ein Datenelement angegeben ist, übernimmt das Ergebnis des Ausdrucks dessen semantischen Eigenschaften. Ausgenommen davon ist die Verwendung des CAST-Ausdrucks innerhalb einer Fallunterscheidung.
- Mit dem Zusatz PRESERVING TYPE bleibt der Datentyp des Operanden erhalten und nur die semantischen Eigenschaften werden geändert.
- Die Zeichen des Surrogat-Bereichs der System-Codepage UTF-16 werden in einem Cast-Ausdruck für Zeichenketten wie zwei Zeichen behandelt. Bei verkürzenden Operationen ist darauf zu achten, solche Zeichen nicht versehentlich zu zerschneiden.
- Bei der Konvertierung zwischen Währungsfeldern vom Typ CURR ist zu beachten, dass CAST deren beim Typ festgelegten Nachkommastellen berücksichtigt, während in ABAP-Anwendungen die Position des Dezimalpunkts in aller Regel nicht berücksichtigt wird.
- Ein CAST-Ausdruck soll plattformunabhängig sein. Konvertierungen vom Typ FLTP in andere numerische Typen sind nicht erlaubt, da das Ergebnis plattformabhängig wäre.
- Ein Aggregatausdruck AVG hat standardmäßig den Typ FLTP. Er kann zwar als Operand angegeben werden, es sind aber keine Castings in andere Typen möglich. Deshalb gibt es für AVG einen eigenen Zusatz AS dtype.
- Für spezielle Konvertierungen, die nicht mit einem CAST-Ausdruck abgedeckt werden können, gibt es spezielle eingebaute Konvertierungsfunktionen:
- FLTP_TO_DEC für die Konvertierung von FLTP in gepackte Zahlen.
Beispiel
Cast-Ausdrücke in einer SELECT-Liste.
@AbapCatalog.sqlViewName: 'SALES_ORDER_VW'
define view sales_order as
select from snwd_so
association [1..*] to snwd_so_i as _item
on snwd_so.node_key = _item.parent_key
{ key snwd_so.node_key,
gross_amount as original_amount,
cast(gross_amount as abap.fltp) +
(cast( -gross_amount as abap.fltp) * 0.03)
as reduced_amount,
cast(gross_amount as abap.fltp) * 0.03
as overall_savings,
_item.so_item_pos as item_position,
_item.gross_amount as item_gross_amount,
cast(_item.gross_amount as abap.fltp) * 0.97
as item_savings }
Beispiel
In der folgenden View wird die Spalte char1 der DDIC-Datenbanktabelle DEMO_EXPRESSIONS auf das Datenelement demo_char_text mit den gleichen technischen Eigenschaften gecastet. In diesem Fall kann und sollte der Zusatz PRESERVING TYPE angegeben werden.
Der folgende Funktionsbausteinaufruf gibt die Eigenschaften des View-Felds zurück. Der ausgegebene Text zeigt, dass die semantischen Eigenschaften des Datenelements übernommen wurden. Die Spalte char1 hat selbst keinen eigenen Text.
DATA dfies_tab TYPE TABLE OF dfies.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = 'DEMO_CDS_CAST_DE'
fieldname = 'CHAR_WITH_TEXT'
langu = sy-langu
TABLES
dfies_tab = dfies_tab.
cl_demo_output=>display( dfies_tab[ 1 ]-fieldtext ).
Beispiel
In der folgenden View wird ein Literal mit den technischen und semantischen Eigenschaften des Datenelements S_MANDT versehen.
CL_GUI_FRONTEND_SERVICES - Frontend Services General Data in Customer Master
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 42293 Date: 20240523 Time: 163438 sap01-206 ( 291 ms )