Ansicht
Dokumentation

ABENCDS_PATH_EXPRESSION_ATTR - CDS PATH EXPRESSION ATTR

ABENCDS_PATH_EXPRESSION_ATTR - CDS PATH EXPRESSION ATTR

PERFORM Short Reference   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- path_expr, attributes

... [ $[1$|*:$] $[INNER$|${LEFT OUTER$} $[WHERE$]$] $[cond_expr$] ] ...

Zusätze:

1. ... 1$|*:

2. ... INNER$|${LEFT OUTER$} $[WHERE$]

3. ... cond_expr

Wirkung

Für jede CDS-Assoziation _assoc eines Pfadausdrucks einer CDS-View können in eckigen Klammern [ ] Attribute für diesen Abschnitt des Pfadausdrucks definiert werden. Mit diesen Attributen kann

  • die Mengenwertigkeit des Abschnitts deklariert werden,
  • die Art des Join-Ausdrucks festgelegt werden,
  • eine Filterbedingung cond_expr angegeben werden.

Zusatz 1

... 1$|*:

Wirkung

Deklaration der Mengenwertigkeit der aktuellen CDS-Assoziation:

  • Wenn das Attribut 1: angegeben ist, ist wird die aktuelle CDS-Assoziation als nicht mengenwertig deklariert.
  • Wenn das Attribut *: angegeben ist, ist wird die aktuelle CDS-Assoziation als mengenwertig deklariert.

Der Zusatz 1: dient dazu, Filterbedingungen in Pfadausdrücken zu ermöglichen, die in WHERE- oder HAVING-Klauseln verwendet werden. Er überschreibt in einer solchen Klausel die Kardinalität der CDS-Assoziation, wobei die Auswirkung auf die Ausprägung des Pfadausdrucks auf bestimmten Datenbanksystemen zu beachten ist.

Der Zusatz 1: oder *: kann nicht als alleiniger Zusatz in den eckigen Klammern aufgeführt werden.

Hinweis

Der Zusatz 1: verhindert einen Syntaxfehler, wenn eine Pfadangabe mit Filterbedingungen oder mit einer mengenwertigen Kardinalität in einer WHERE- oder HAVING-Klausel verwendet wird. Zur Laufzeit kann jedoch nicht überprüft werden, ob durch die Bedingung die geforderte Eindeutigkeit erreicht wird.

Zusatz 2

... INNER$|${LEFT OUTER$} $[WHERE$]

Wirkung

Definition der Art des Join-Ausdrucks, in den die aktuelle CDS-Assoziation umgesetzt wird:

  • INNER bewirkt einen inneren Join
  • LEFT OUTER bewirkt einen links äußeren Join

Wenn die Art des Join-Ausdrucks nicht explizit angegeben ist, hängt sie von der Stelle ab, an welcher der Pfadausdruck verwendet wird:

  • Hinter FROM ist es ein innerer Join (INNER JOIN)
  • An allen anderen Stellen ist es ein links äußerer Join (LEFT OUTER JOIN)

Wenn die Definition der Art des Join-Ausdrucks vor einer Filterbedingung cond_expr angegeben ist, muss vor dieser der Zusatz WHERE aufgeführt werden. Ansonsten darf WHERE nicht angegeben werden.

Hinweis

Im DDL-Quelltext-Editor der ADT kann man in der Anzeige der generierten SQL-DDL-Anweisung die Ausprägung der Joins beobachten.

Joins von CDS-Assoziationen

Zusatz 3

... cond_expr

Wirkung

Filterbedingung für die aktuelle CDS-Assoziation. Eine Filterbedingung ist eine Bedingung cond_exp, die bei der Auflösung der CDS-Assoziation in einen Join in eine erweiterte Bedingung für den Join umgesetzt wird. Für die Angabe der Bedingung gelten spezielle Regeln.

Wenn im Pfadausdruck keine Filterbedingung angegeben ist, wird die eventuell für die CDS-Assoziation angegebene Standardfilterbedingung verwendet.

Hinweis

Eine Filterbedingung ändert in aller Regel den Join-Ausdruck, der für eine CDS-Assoziation eines Pfadausdrucks auf der Datenbank ausgeprägt wird. Deshalb wird standardmäßig für jede CDS-Assoziation mit einer Filterbedingung ein eigener Join-Ausdruck ausgeprägt. Dies ist aber unnötig, wenn bei mehrfacher Verwendung einer CDS-Assoziation auch die gleiche Filterbedingung angegeben ist. Deshalb kann mit der ABAP-Annotation AbapCatalog.compiler.compareFilter eingestellt werden, ob für die Pfadausdrücke, die bei der Aktivierung einer View als Joins ausgeprägt werden, die Filterbedingungen einer mehrfach verwendeten CDS-Assoziation semantisch verglichen werden. Bei gleicher Filterbedingung wird der zugehörige Join-Ausdruck dann nur einmal gebildet, was in der Regel zu einer verbesserten Performance führt. In der Regel wird die Verwendung der Annotation empfohlen und beim Anlegen einer CDS-View in den ADT vorgeschlagen. Die Ergebnismengen beider Einstellungen können aber auch unterschiedlich sein.

Beispiel

Die folgenden drei Views enthalten Pfadausdrücke mit Filterbedingungen in ihrer SELECT-Liste, die bei der Aktivierung in Join-Ausdrücke ausgeprägt werden.

In der ersten View hat die Annotation AbapCatalog.compiler.compareFilter den empfohlenen Wert true. Die Bedingungen werden als gleich erkannt und die Ausprägung der Pfadausdrücke auf einer SAP-HANA-Datenbank sieht in etwa so aus:

CREATE VIEW "DEMOCDSASSFI1" AS SELECT
  "=A0"."D" AS "D_2",
  "=A0"."E" AS "E_2",
  "=A1"."I" AS "I_3",
  "=A1"."J" AS "J_3"
FROM (
  "DEMO_JOIN1" "DEMO_JOIN1" INNER JOIN "DEMO_CDS_ASJO2" "=A0" ON (
    "=A0"."D" = "DEMO_JOIN1"."D" AND
    "=A0"."D" = N'1'
  )
) INNER JOIN "DEMO_JOIN3" "=A1" ON (
  "=A1"."L" = "=A0"."D" AND
  "=A1"."I" = N'2'
)

Bei der zweiten View hat AbapCatalog.compiler.compareFilter den Wert false und trotz gleicher Bedingungen wird für jede CDS-Assoziation der Pfadausdrücke ein Join-Ausdruck ausgeprägt. Diese Ausprägung sieht deshalb so aus wie die der dritten View, in der alle Bedingungen unterschiedlich sind:

CREATE VIEW "DEMOCDSASSFI2" AS SELECT
  "=A0"."D" AS "D_2",
  "=A1"."E" AS "E_2",
  "=A3"."I" AS "I_3",
  "=A5"."J" AS "J_3"
FROM (
  (
    (
      (
        (
          "DEMO_JOIN1" "DEMO_JOIN1" INNER JOIN "DEMO_CDS_ASJO2" "=A0" ON (
            "=A0"."D" = "DEMO_JOIN1"."D" AND
            "=A0"."D" = N'1'
          )
        ) INNER JOIN "DEMO_CDS_ASJO2" "=A1" ON (
          "=A1"."D" = "DEMO_JOIN1"."D" AND
          "=A1"."D" = N'1'
        )
      ) INNER JOIN "DEMO_CDS_ASJO2" "=A2" ON (
        "=A2"."D" = "DEMO_JOIN1"."D" AND
        "=A2"."D" = N'1'
      )
    ) INNER JOIN "DEMO_JOIN3" "=A3" ON (
      "=A3"."L" = "=A2"."D" AND
      "=A3"."I" = N'2'
    )
  ) INNER JOIN "DEMO_CDS_ASJO2" "=A4" ON (
    "=A4"."D" = "DEMO_JOIN1"."D" AND
    "=A4"."D" = N'1'
  )
) INNER JOIN "DEMO_JOIN3" "=A5" ON (
  "=A5"."L" = "=A4"."D" AND
  "=A5"."I" = N'2'
)

CREATE VIEW "DEMOCDSASSFI3" AS SELECT
  "=A0"."D" AS "D_2",
  "=A1"."E" AS "E_2",
  "=A3"."I" AS "I_3",
  "=A5"."J" AS "J_3"
FROM (
  (
    (
      (
        (
          "DEMO_JOIN1" "DEMO_JOIN1" INNER JOIN "DEMO_CDS_ASJO2" "=A0" ON (
            "=A0"."D" = "DEMO_JOIN1"."D" AND
            "=A0"."D" = N'1'
          )
        ) INNER JOIN "DEMO_CDS_ASJO2" "=A1" ON (
          "=A1"."D" = "DEMO_JOIN1"."D" AND
          "=A1"."D" = N'2'
        )
      ) INNER JOIN "DEMO_CDS_ASJO2" "=A2" ON (
        "=A2"."D" = "DEMO_JOIN1"."D" AND
        "=A2"."D" = N'3'
      )
    ) INNER JOIN "DEMO_JOIN3" "=A3" ON (
      "=A3"."L" = "=A2"."D" AND
      "=A3"."I" = N'5'
    )
  ) INNER JOIN "DEMO_CDS_ASJO2" "=A4" ON (
    "=A4"."D" = "DEMO_JOIN1"."D" AND
    "=A4"."D" = N'4'
  )
) INNER JOIN "DEMO_JOIN3" "=A5" ON (
  "=A5"."L" = "=A4"."D" AND
  "=A5"."I" = N'6'
)





Vendor Master (General Section)   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 14438 Date: 20240523 Time: 175125     sap01-206 ( 140 ms )