Ansicht
Dokumentation

ABENCDS_INTERSECT_V2 - CDS INTERSECT V2

ABENCDS_INTERSECT_V2 - CDS INTERSECT V2

ABAP Short Reference   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

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

... INTERSECT select_statement ...

Wirkung

Der Mengenoperator INTERSECT gibt alle eigenständig abgrenzbaren Zeilen zurück, die in allen Ergebnismengen von mehrfachen SELECT-Anweisungen der enthalten sind. 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. Es werden alle Datentypen unterstützt, mit Ausnahme von STRING, RAWSTRING, LCHR, LRAW, und GEOM_EWKB. Eine View mit INTERSECT kann selbst die linke Seite einer weiteren View mit INTERSECT sein.

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

Regeln für die Elemente einer View mit INTERSECT

Die erste SELECT-Anweisung definiert die Signatur der INTERSECT-View. Die Elemente der Ergebnismenge der INTERSECT-View haben die folgenden Eigenschaften:

  • 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 Ergebnismenge 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 View mit INTERSECT miteinander kombiniert 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 kombiniert 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 INTERSECT-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 Views mit INTERSECT

Eine CDS-View-Entität, in der mit INTERSECT Ergebnismengen gebildet werden, kann CDS-Assoziationen definieren und exponieren. Eine solche Assoziation muss auf die gleiche Weise in allen SELECT-Anweisungen, die mit INTERSECT kominiert 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 INTERSECT kominiert 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 INTERSECT-Ergebnismenge exponierte CDS-Assoziation. Für CDS-Assoziationen, die nicht in den SELECT-Listen exponiert werden, gibt es keine Einschränkungen.

Schachtelung von INTERSECT-Verzweigungen

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

  • Die Definition neuer CDS-Kompositionen und To-Parent-Assoziationen ist in einer View mit INTERSECT nicht möglich. Das Exponieren von CDS-Kompositionen und To-Parent-Assoziationen, die in der Datenquelle der SELECT-Anweisung defineirt 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

  • 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 INTERSECT zusammengeführt werden können, hängt vom Datenbanksystem ab. Wenn diese Anzahl überschritten wird, kann die CDS-View-Entität nicht aktiviert werden.
  • Der Zusatz ALL ist für den Mengenoperator INTERSECT nicht verfügbar.

Beispiel

Mit folgender CDS-View-Entität werden die Ergebnismengen von zwei SELECT-Anweisungen über INTERSECT kombiniert. Nur die Zeilen werden zurückgegeben, die von beiden Queries zurückgegeben werden.

Das Programm DEMO_CDS_INTERSECT greift mit SELECT auf die View zu und stellt das Ergebnis dar.






RFUMSV00 - Advance Return for Tax on Sales/Purchases   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 42502 Date: 20240523 Time: 183522     sap01-206 ( 315 ms )