Reading Sample
2.1 CDS-Views mit UNION-Klauseln
Mit der UNION-Klausel bilden Sie Vereinigungsmengen aus mehreren ähnlichen Datenquellen. Im Gegensatz zu den in Abschnitt 1.1.3 aus mehreren Datenbanktabellen dargestellten Verknüpfungen definieren Sie bei Bildung der Vereinigungsmenge keine Assoziations- oder JOIN-Bedingungen. In die Vereinigungsmenge werden nacheinander die Datensätze aus den einzelnen Quellen aufgenommen.
Zur Bildung einer Vereinigungsmenge müssen die Datenquellen mehrere gemeinsame Felder besitzen, und die Feldlisten, die innerhalb des CDS-Views für jede Datenquelle definiert werden, müssen den folgenden Voraussetzungen genügen:
- Die Anzahl Felder ist in jeder Feldliste identisch.
- Die Felder müssen auf denselben Positionen identische Dictionary-Typen besitzen.
- Wenn keine Namensliste (Abschnitt 1.1.3) vorhanden ist, müssen die Felder auf denselben Positionen identische Namen haben.
Position meint in diesem Zusammenhang die Spalte. Spalte 1 entspricht Position 1, Spalte 2 Position 2 etc.
Folgendes Beispiel veranschaulicht dies: Im Demopaket werden die Flughäfen in der Tabelle SAIRPORT abgelegt. Jetzt wollen Sie zusätzlich zu den Feldern Flughafencode, Flughafenname und Zeitzone noch die Flughafengebühren erfassen. Hierfür kopieren Sie die Tabelle SAIRPORT in die Tabelle ZAIRPORT und erweitern die Tabelle ZAIRPORT. Sie haben jetzt zwei Tabellen, die die Flughäfen enthalten. Ein Flughafen kann nur in der Tabelle SAIRPORT, in der Tabelle ZAIRPORT oder in beiden angelegt sein. Für einen Help-View benötigen Sie jetzt den Code und den Namen aller Flughäfen, unabhängig davon, in welcher Tabelle der Flughafen abgelegt ist. Dieser Help-View soll doppelte Einträge nur einmal ausgeben.
Mit Open SQL und ABAP könnten Sie diese Anforderung wie in Listing 2.1 mit zwei SELECT-Anweisungen lösen.
SELECT id, name FROM sairport INTO TABLE @airports. SELECT id, name FROM zairport APPENDING TABLE @airports. SORT airports BY id, name. DELETE ADJACENT DUPLICATES FROM airports.
Listing 2.1: Vereinigungsmenge aus den Tabellen »SAIRPORT« und »ZAIRPORT« mit Open-SQL-Anweisungen
Die Voraussetzungen zur Bildung der Vereinigungsmenge mit der UNION-Klausel sind erfüllt, wenn nur die Felder ID (Flughafencode) und NAME (Flughafenname) gelesen werden. Daher können Sie diese Anforderung auch mit dem in Listing 2.2 dargestellten CDS-View lösen, der die Vereinigungsmenge aus den Tabellen SAIRPORT und ZAIRPORT bildet.
@AbapCatalog.sqlViewName: 'zun_airport' @AbapCatalog.compiler.compareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Airports' define view zunion_airports as select from sairport { id, name } union select from zairport { id, name }
Listing 2.2: Vereinigungsmenge aus den Tabellen »SAIRPORT« und »ZAIRPORT« mit UNION-Klausel in einem CDS-View
Beide Lösungen liefern das gleiche Resultat: In Listing 2.1 liegt dies als interne Tabelle vor, in Listing 2.2 als Datenbank-View.
Wollen Sie die Duplikate aus dem Help-View beibehalten, können Sie die SORT
- und die DELETE-ADJACENT-DUPLICATES
-Anweisung in Listing 2.1 weglassen. Im CDS-View aus Listing 2.2 fügen Sie wie in Listing 2.3 das Schlüsselwort ALL
nach dem Schlüsselwort UNION
ein. Duplikate bleiben somit bestehen.
@AbapCatalog.sqlViewName: 'zun_airport' @AbapCatalog.compiler.compareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Airports' define view zunion_airports as select from sairport { id, name } union all select from zairport { id, name }
Listing 2.3: Vereinigungsmenge aus den Tabellen »SAIRPORT« und »ZAIRPORT« mit Duplikaten
All contents. Learn more. Discover now.
et.training - Your learning platform for SAP software
- Access to all learning content1
- Regular new releases
- Intelligent search algorithm
- Innovative reading experience
- Customized learning paths
- Certificates & QA tests2
1 You get access to all learning content. Online trainings, certificates are NOT part of the flat rate.
2 More information on request.