Ansicht
Dokumentation

ABENCDS_UNION_V1 - CDS UNION V1

ABENCDS_UNION_V1 - CDS UNION V1

PERFORM Short Reference   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- DDIC-basierte View, SELECT, UNION

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

Wirkung

Führt die Zeilen der Ergebnismengen zweier 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. Die Datentypen DF16_..., DF34_..., LCHR,LRAW,STRING, RAWSTRING oder GEOM_EWKB werden nicht unterstützt. 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. Die Eigenschaften der Elemente der vereinigten Ergebnismenge werden wie folgt bestimmt:

  • Elementnamen
  • Wenn eine explizite Namensliste angegeben ist, bestimmt diese die Namen der Elemente

  • Wenn keine explizite Namensliste angegeben ist, müssen die direkten oder mit AS definierten alternativen Elementnamen für jede Spalte in den SELECT-Listen aller SELECT-Anweisungen übereinstimmen und werden verwendet.

  • Schlüsselelemente
Die SELECT-Liste der ersten SELECT-Anweisung bestimmt die Schlüsselelemente.
  • Elementannotationen
Nur die Elementannotationen aus der SELECT-Liste der ersten SELECT-Anweisung werden angewendet.
  • Datentyp
  • Die SELECT-Liste der ersten SELECT-Anweisung bestimmt den 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 CURR QUAN FLTP CHAR SSTRING NUMC DATS TIMS ACCP CLNT LANG UNIT CUKY RAW
INT1 x w w w w w w w - - - - - - - - - - -
INT2 x x w w w w w w - - - - - - - - - - -
INT4 x x x w w w w w - - - - - - - - - - -
INT8 x x x x w w w w - - - - - - - - - - -
DEC w w w w w w w w - - - - - - - - - - -
CURR w w w w w w w w - - - - - - - - - - -
QUAN w w w w w w w w - - - - - - - - - - -
FLTP x x x w w w w x - - - - - - - - - - -
CHAR - - - - - - - - w w l w w l l l l l -
SSTRING - - - - - - - - w w - - - - - - - - -
NUMC - - - - - - - - w - l l l l l l - - -
DATS - - - - - - - - w - l x - - - - - - -
TIMS - - - - - - - - w - l - x - - - - - -
ACCP - - - - - - - - l - l - - x - - - - -
CLNT - - - - - - - - l - l - - - x - - - -
LANG - - - - - - - - l - l - - - - x - - -
UNIT - - - - - - - - l - - - - - - - x - -
CUKY - - - - - - - - l - - - - - - - - x -
RAW - - - - - - - - - - - - - - - - - - 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.

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.

Eine CDS-View, in der mit UNION Vereinigungsmengen 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 haben den gleichen Namen.
  • 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.

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.

Die Definition neuer CDS-Kompositionen und ist in einer CDS-View mit UNION oder UNION ALL nicht möglich.

Hinweise

  • Vereinigungsmengen 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 nicht aktiviert werden.

Beispiele

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

@AbapCatalog.sqlViewName: '...'
define view ... 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 }

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

@AbapCatalog.sqlViewName: '...'
define view ... ( c1, c2, c3, c4 ) as
  select
    from demo_join1
      { a, b, c, d }
    union
      select
        from demo_join2
          { d, e, f, g }

Beispiel

Die folgende CDS-View 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 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 ist aber in allen Fällen die empfohlene Vorgehensweise.






ABAP Short Reference   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 29480 Date: 20240523 Time: 165356     sap01-206 ( 293 ms )