Ansicht
Dokumentation

ABENCDS_UNION_V2 - CDS UNION V2

ABENCDS_UNION_V2 - CDS UNION V2

rdisp/max_wprun_time - Maximum work process run time   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- CDS-View-Entität, SELECT, UNION

... UNION $[ALL$] select_statement ...

Wirkung

Führt die Zeilen der Ergebnismengen mehrerer SELECT-Anweisungen von in eine Ergebnismenge zusammen. Als Voraussetzung muss die Ergebnismenge die gleiche Anzahl an Elementen haben und die Elementenpaare, die an derselben Position der Ergebnismenge vorkommen, müssen einen kompatiblen Datentyp haben. Eine vereinigte Ergebnismenge kann wieder linke Seite einer weiteren Vereinigung sein. Wenn der Zusatz ALL angegeben ist, werden alle Einträge und sogar Duplikate in der Ergebnismenge aufgeführt. Ohne ALL werden duplikative Einträge aus der Ergebnismenge entfernt.

Datentypen

Wenn der Zusatz ALL angegeben ist, sind alle Datentypen in einer Union-View möglich. Elemente mit den Datentypen LRAWund LCHR müssen am Ende der View sein und ein Element vom Typ INT2 oder INT4, das die Maximallänge des Elements darstellt, muss direkt vor einem solchen Element stehen. Es ist nur ein solches Element pro View erlaubt.

Ohne den Zusatz ALL werdendie Datentypen STRING, RAWSTRING, LCHR, LRAW, und GEOM_EWKB nicht unterstützt.

Eine Voraussetzung zur Verwendung der Anweisung UNION in einer CDS-View-Entität ist die Angabe der CDS-View-Entitätsannotation Metadata.ignorePropagatedAnnotations: true.

Regeln für die Elemente einer UNION-View.

In der Regel definiert die erste SELECT-Anweisung die Signatur der UNION-View. Im Folgenden sind die Details zu den Eigenschaften der Element der zusammengeführten Ergebnismenge:

  • Elementnamen
Die direkten oder mit AS definierten alternativen Elementnamen müssen für jede Spalte in den SELECT-Listen aller SELECT-Anweisungen übereinstimmen und werden verwendet.
  • Schlüsselelemente
Die Schlüsselelemente aller SELECT-Listen müssen übereinstimmen. Andernfalls kommt es zu einem Fehler bei der Syntaxprüfung.
  • Elementannotationen
Nur die SELECT-Liste der ersten SELECT-Anweisung kann Elementannotationen definieren. In allen nachfolgenden Verzweigungen sind Elementannotationen verboten.
  • Datentyp
  • Die SELECT-Liste der ersten SELECT-Anweisung bestimmt den DDIC-Datentyp von jedem Element der CDS-Entität.

  • Der Datentyp mit dem die Vereinigungsmenge auf der Datenbank gebildet wird, ist ein Datentyp dessen Wertebereich die Datentypen der zugehörigen Spalten aller beteiligten Ergebnismengen umfasst.

Die folgende Tabelle zeigt, welche Datentypen in einer Union mit miteinander zusammengeführt werden können. Auf der linken Seite werden die Datentypen der SELECT-Liste der ersten SELECT-Anweisung aufgelistet, während die anderen Spalten angeben, mit welchen Datentypen der folgenden SELECT-Liste sie zusammengeführt werden können.

Erster/folgende INT1 INT2 INT4 INT8 DEC DF16_... DF34_... CURR QUAN FLTP CHAR SSTRING STRING NUMC DATS DATN TIMS TIMN UTCL ACCP CLNT LANG UNIT CUKY RAW GEOM_EWKB
INT1 x w w w w - - - w w - - - - - - - - - - - - - - - -
INT2 x x w w w - - - w w - - - - - - - - - - - - - - - -
INT4 x x x w w - - - w w - - - - - - - - - - - - - - - -
INT8 x x x x w x - - w w - - - - - - - - - - - - - - - -
DEC w w w w w w w - w w - - - - - - - - - - - - - - - -
DF16_... w w w w w x - - w w - - - - - - - - - - - - - - - -
DF34_... w w w w w x x - w w - - - - - - - - - - - - - - - -
CURR - - - - - - - d - - - - - - - - - - - - - - - - - -
QUAN w w w w w w w - w w - - - - - - - - - - - - - - - -
FLTP x x x w w w w - w x - - - - - - - - - - - - - - - -
CHAR - - - - - - - - - - w w - l w - w - - l - l - - - -
SSTRING - - - - - - - - - - w w - - - - - - - - - - - - - -
STRING - - - - - - - - - - - - w - - - - - - - - - - - - -
NUMC - - - - - - - - - - w - - l l - l - - l - l - - - -
DATS - - - - - - - - - - w - - l x - - - - - - - - - - -
DATN - - - - - - - - - - - - - - - x - - - - - - - - - -
TIMS - - - - - - - - - - w - - l - - x - - - - - - - - -
TIMN - - - - - - - - - - - - - - - - - x - - - - - - - -
UTCL - - - - - - - - - - - - - - - - - - x - - - - - - -
ACCP - - - - - - - - - - l - - l - - - - - x - - - - - -
CLNT - - - - - - - - - - - - - - - - - - - - x - - - - -
LANG - - - - - - - - - - l - - l - - - - - - - x - - - -
UNIT - - - - - - - - - - - - - - - - - - - - - - x - - -
CUKY - - - - - - - - - - - - - - - - - - - - - - - x - -
RAW - - - - - - - - - - - - - - - - - - - - - - - - x -
GEOM_EWKB - - - - - - - - - - - - - - - - - - - - - - - - - x

Bei Kombinationen mit "x" sind keine weiteren Einschränkungen zu beachten. Bei den übrigen Kombinationen gelten folgende Regeln:

  • Bei Kombinationen mit "w" sollte die Länge bzw. der Wertebereich des Datentyps in der ersten SELECT-Liste ausreichend für alle folgenden SELECT-Listen sein. Es kommt zu einer Warnung von der Syntaxprüfung, wenn dies nicht der Fall ist.
  • Bei Kombinationen mit "l" müssen die Längen der Datentypen genau übereinstimmen.
  • Bei Kombinationen mit "d" muss die Anzahl der Nachkommastellen genau übereinstimmen.

Wenn bei einer Kombination mit "w" die Länge bzw. der Wertebereich des ersten Elements nicht die folgenden Elemente abdeckt, kann der von der Datenbank zurück gegebene Wert zu groß für den Datentyp des Elements der CDS-Entität sein. Die View ist dann zwar aktivierbar, bei einem Zugriff mit einer Query in kann es aber gemäß der Zuweisungsregeln der INTO-Klausel zum Abschneiden von Inhalt oder zu Ausnahmen kommen, falls mit einem Typbezug auf die Entität gearbeitet wird. Zuweisungen an ABAP-Datenobjekte mit genügend großem Wertebereich sind dagegen problemlos möglich.

Beträge und Mengen in UNION-Views

Wenn die Elemente einer UNION-View CDS-Betragsfelder, CDS-Mengenfelder oder berechnete CDS-Mengen sind, gelten folgende Regeln:

  • Da die Annotation Metadata.ignorePropagatedAnnotations: true in UNION-Views obligatorisch ist, gehen alle Referenzannotationen verloren und müssen innerhalb der ersten SELECT-Verzweigung neu bereitgestellt werden.
  • Bei Elementen vom Datentyp CURR oder QUAN und bei berechneten Mengen ist die Referenzannotation obligatorisch.

  • Bei Elementen von anderen Datentypen gehen die Referenzinformation und das Merkmal als Betrags- oder Mengenfeld verloren Die jeweilige Referenzannotation kann neu zugeordnet werden, um das Feld als Betrags- oder Mengenfeld zu deklarieren. Das ist optional.

  • Berechnete Mengenfelder dürfen nur mit anderen berechneten Mengenfeldern zusammengeführt werden. Betrags- und Mengenfelder dürfen zusammengeführt werden, aber nur bei übereinstimmenden Datentypen (siehe Matrix oben).
  • Bei Betragsfeldern vom Typ CURR muss die Anzahl Nachkommastellen in allen UNION-Verzweigungen genau übereinstimmen.
  • Elemente vom Datentyp CURR sind mit keinem anderen Datentyp kompatibel. Mit der Funktion CURR_TO_DECFLOAT_AMOUNT kann ein Betragsfeld vom Datentyp CURR in einen Betragsfeld vom Datentyp DECFLOAT34 konvertiert werden.

Assoziationen in UNION-Views

Eine CDS-View-Entität, in der mit UNION Unionen gebildet werden, kann CDS-Assoziationen exponieren. Eine solche Assoziation muss auf die gleiche Weise in allen SELECT-Anweisungen, die mit UNION zusammengeführt sind, definiert und exponiert werden. Das heißt, dass CDS-Assoziationen, die in den entsprechenden SELECT-Listen exponiert sind, in allen SELECT-Anweisungen, die mit UNION zusammengeführt sind, vorkommen und die folgenden Anforderungen erfüllt werden müssen:

  • Sie müssen an der gleichen Position der SELECT-Liste über einen Pfadausdruck exponiert werden.
  • Sie müssen die gleichen ON-Bedingungen haben, d.h.:
  • Die Bedingungen müssen sich auf die gleichen Felder in Assoziationsquelle und -ziel beziehen und für diese die gleiche Logik ausdrücken.

  • Die in der ON-Bedingung aufgeführten Felder der Assoziationsquelle müssen jeweils an identischen Positionen in der SELECT-Liste stehen.

  • Es ist nicht erforderlich, dass die Assoziationen mit demselben Aliasnamen definiert werden.

Diese Regeln gelten auch, wenn eine CDS-Assoziation in einer Datenquelle einer SELECT-Anweisung definiert ist und von der aktuellen Anweisung exponiert wird. Die in den einzelnen SELECT-Listen exponierten gleichnamigen CDS-Assoziationen wirken von außen wie eine von der Union exponierte CDS-Assoziation. Für CDS-Assoziationen, die nicht in den SELECT-Listen exponiert werden, gibt es keine Einschränkungen.

Schachtelung von UNION-Verzweigungen

In CDS-View-Entitäten ist die Schachtelung von Union-Klauseln möglich. Um eine Union-Klausel innerhalb einer anderen Union-Klausel zu schachteln, verwenden Sie Klammern ( ... ). Eine geschachtelte Union-Klausel wird zuerst zusammengeführt und ihre Ergebnismenge wird anschließend erneut mit den Ergebnismengen der anderen Union-Verzweigungen zusammengeführt.

Beispiel Nummer 3 zeigt die Schachtelung von Union-Verzweigungen.

  • Die Definition neuer CDS-Kompositionen ist in einer UNION-View nicht möglich. Das Exponieren von CDS-Kompositionen und To-Parent-Assoziationen, die in einer Datenquelle der SELECT-Anweisungen definiert wurden, ist möglich.
  • Annotationen sind nur in der SELECT-Liste der ersten SELECT-Anweisung erlaubt. In allen folgenden Verzweigungen sind Annotationen nicht erlaubt.

Hinweise

  • Unionen können sinnvoll sein, um nicht normalisierte DDIC-Datenbanktabellen in eine normalisierte View der Daten zu überführen.
  • Wenn die Länge oder der Wertebereich eines Elements aus der SELECT-Liste der ersten SELECT-Anweisung nicht die der zugehörigen Elemente der folgenden SELECT-Anweisungen abdeckt, wird empfohlen, einen ausreichenden Typ mit einem geeigneten CAST-Ausdruck festzulegen.
  • Die maximale Anzahl verschiedener SELECT-Anweisungen, die mit UNION zusammengeführt werden können, hängt vom Datenbanksystem ab. Wenn diese Anzahl überschritten wird, kann die CDS-View-Entität nicht aktiviert werden.

Beispiel

Vereinigungsmenge. Die Elementnamen der SELECT-Listen müssen übereinstimmen.


define view entity ... as
  select
    from demo_join1
      { a as c1, b as c2, c as c3, d as c4 }
    union
      select
        from demo_join2
          { d as c1, e as c2, f as c3, g as c4 }

Beispiel

Die folgende CDS-View-Entität vereinigt die Ergebnismengen zweier SELECT-Anweisungen. Das Element col1 der ersten SELECT-Liste ist vom Typ INT4 während das zugehörige Element col1 der zweiten SELECT-Liste vom Typ INT8 ist. Deshalb kommt es zu einer Warnung von der Syntaxprüfung. Um die Warnung zu überspringen, wird col2 mithilfe eines CAST-Ausdrucks in den Datentyp INT8 konvertiert.

Das Programm DEMO_CDS_UNION_ELEMENT_TYPE_VE greift viermal mit SELECT auf die View zu:

  • Im ersten Zugriff wird direkt in eine interne Tabelle vom Zeilentyp der CDS-Entität geschrieben. Da der Wert des Elements col1 in den Wertebereich von Datentyp i passt, ist der Zugriff erfolgreich.
  • Der zweite Zugriff erfolgt wie der erste Zugriff, ein Wert im Element col1 ist aber außerhalb des Wertebereichs des Datentyps i der ersten Spalte der internen Tabelle result2. Deshalb kommt es zu einer Ausnahme.
  • Im dritten Zugriff wird die Ausnahme verhindert, da der Datentyp der ersten Spalte der Ergebnismenge und damit auch der internen Tabelle result3 durch einen CAST in auf int8 erweitert wird.
  • Im vierten Zugriff wird die Ausnahme dadurch verhindert, dass der Datentyp der ersten Spalte der internen Tabelle result4 ausreichend deklariert ist.

Die Behandlung des zweiten Elements über einen CAST in der CDS-View-Entität ist aber in allen Fällen die empfohlene Vorgehensweise.

Beispiel - Schachtelung von Union-Klauseln

Die folgende CDS-View-Entität schachtelt eine Union-Klausel innerhalb einer anderen Union-Klausel.

Das Programm DEMO_CDS_UNION_NESTING_VE befüllt zuerst die zugrundeliegende Datenbanktabelle und greift anschließend mit SELECT auf die View zu. Die Ergebnismenge besteht aus 9 Zeilen. Zwei davon sind Duplikate, gekennzeichnet in gelb.

IMAGE @@nesting_result.png@@170@@213@@

Hätte keine Schachtelung stattgefunden und wären die Klammern ( ) um die zwei letzten Union-Verzweigungen ausgelassen, würde die Ergebnismenge nur 7 Zeilen zurückgeben. Der Grund dafür ist, dass die dritte Union-Verzweigung nicht den Zusatz ALL verwendet. Mit der Schachtelung werden duplikative Einträge nur aus den letzten zwei Verzweigungen entfernt, die ineinander verschachtelt sind.

Ohne die Schachtelung würden duplikative Einträge aus allen Union-Verzweigungen entfernt werden und die Ergebnismenge würde weniger Zeilen enthalten.






ROGBILLS - Synchronize billing plans   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 46842 Date: 20240523 Time: 173115     sap01-206 ( 383 ms )