Ansicht
Dokumentation

ABENCDS_CAST_EXPRESSION_V1 - CDS CAST EXPRESSION V1

ABENCDS_CAST_EXPRESSION_V1 - CDS CAST EXPRESSION V1

ABAP Short Reference   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- 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
  • 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.

  • BINTOHEX und HEXTOBIN für die Konvertierung von Byteketten in Zeichenketten und umgekehrt.

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 )