Ansicht
Dokumentation
ABENDDICDDL_DEFINE_JOIN_DRUL - DDICDDL DEFINE JOIN DRUL
PERFORM Short Reference ROGBILLS - Synchronize billing plansDiese Dokumentation steht unter dem Copyright der SAP AG.
- DEFINE JOIN DEPENDENCY RULE
DEFINE JOIN DEPENDENCY RULE drul
ON dbtab1, dbtab2
IF { cond_pattern }
THEN { derived_cond }
Wirkung
Variante der Anweisung DEFINE DEPENDENCY RULE der Dictionary DDL zur Definition einer Join- Abhängigkeitsregel. Eine Join-Abhängigkeitsregel kann für genau zwei Datenbanktabellen dbtab1 und dbtab2 definiert werden, die über ein Komma getrennt anzugeben sind. Sie leitet aus dem Muster cond_pattern eine zusätzliche Join-Bedingung derived_cond ab. Der Optimizer der SAP-HANA-Datenbank sucht bei einem Lesezugriff, bei dem die beiden DDIC-Datenbanktabellen über einen Join-Ausdruck verknüpft sind, das Muster in dessen ON-Bedingung und fügt gegebenenfalls die zusätzliche Join-Bedingung mit AND an diese hinzu. Weiterhin werden zusätzliche Bedingungen, die durch eventuelle Filter-Abhängigkeitsregel für die beiden Datenbanktabellen definiert sind, auch für die jeweils andere DDIC-Datenbanktabelle übernommen, falls sie die in der Join-Bedingung genannten Spalten betreffen.
cond_pattern
Für cond_pattern kann in den geschweiften Klammern hinter IF wie folgt ein Muster eines relationalen Ausdrucks angegeben werden:
lhs = rhs $[AND lhs = rhs ...$]
Es sind über AND verknüpfte Vergleiche mit dem Operator = möglich. Verknüpfungen mit OR oder Negierungen mit NOT sind nicht möglich.
- Als linke Seite lhs des Vergleichs kann angegeben werden:
- dbtab1.column oder dbtab2.column für eine Spalte column der DDIC-Datenbanktabellen dbtab1 oder dbtab2.
- Als rechte Seite rhs des Vergleichs kann angegeben werden:
- dbtab1.column oder dbtab2.column für eine Spalte column der DDIC-Datenbanktabellen dbtab1 oder dbtab2.
- Ein Zeichenliteral oder ein numerisches Literal. Die Syntax entspricht der von Literalen in ABAP CDS.
- Ein nummerierter Platzhalter $1, $2, ...
derived_cond
Für derived_cond kann in den geschweiften Klammern hinter THEN wie folgt eine Vorlage eines relationalen Ausdrucks angegeben werden:
lhs =$|$|>$|=$|>= rhs $[OR lhs =$|$|>$|<=$|>= rhs ...$]
Klammerungen einzelner Vergleiche mit runden Klammern ( ) sind möglich. Negierungen mit NOT sind nicht möglich.
- Als linke Seite lhs eines Vergleichs kann angegeben werden:
- dbtab1.column oder dbtab2.column für eine Spalte column der Datenbanktabellen dbtab2.column oder dbtab2.column.
- Als rechte Seite rhs eines Vergleichs kann angegeben werden:
- dbtab1.column oder dbtab2.column für eine Spalte column der Datenbanktabellen dbtab2.column oder dbtab2.column.
- Ein Zeichenliteral oder ein numerisches Literal. Die Syntax entspricht der von Literalen in ABAP CDS.
- Ein nummerierter Platzhalter $1, $2, ..., der auch in cond_pattern angegeben sein muss. Beim Hinzufügen der Bedingung wird hier der Operand der gefundenen Bedingung eingesetzt, für den der gleiche Platzhalter im Muster cond_pattern steht.
- Eingebaute Funktionen des ABAP Dictionary in der Syntax von ABAP CDS.
- Einfache Fallunterscheidung in der Syntax von ABAP CDS.
Hinweise
- Es ist nicht garantiert, dass der Optimizer der SAP-HANA-Datenbank das gesuchte Muster cond_pattern findet. Deshalb darf die zusätzliche Bedingung derived_cond die Ergebnismenge der ursprünglichen Query nicht beeinflussen. Das ist zwar technisch möglich, kann aber zu undefiniertem Verhalten führen, wenn der Optimizer der SAP-HANA-Datenbank das gesuchte Muster cond_pattern bei einem Teil der Zugriffe findet und bei anderen nicht.
- Die zusätzliche Bedingung kann für eine Query im Werkzeug SQL-Trace (Transaktion ST05) über die Funktion Ausführungsplan anzeigen beobachtet werden.
Beispiel
Es seien folgende Abhängigkeitsregeln definiert:
DEFINE FILTER DEPENDENCY RULE demo_drul_3
ON demo_parts_3
IF { demo_parts_3.value >= 30 }
THEN { demo_parts_3.area >= 3 }
DEFINE FILTER DEPENDENCY RULE demo_drul_4
ON demo_parts_3
IF { demo_parts_3.value 40 }
THEN { demo_parts_3.area 4 }
DEFINE JOIN DEPENDENCY RULE demo_drul_5
ON demo_parts_3, demo_parts_4
IF { demo_parts_3.client = demo_parts_4.client AND
demo_parts_3.id = demo_parts_4.id AND
demo_parts_3.value = demo_parts_4.value }
THEN { demo_parts_3.area = demo_parts_4.area }
Im Programm DEMO_DEPENDENCY_RULE_3 wird mit folgender SELECT-Anweisung auf DEMO_PARTS_3 und DEMO_PARTS_4 zugegriffen:
SELECT demo_parts_3~id, demo_parts_3~value, demo_parts_4~text
FROM demo_parts_3
INNER JOIN demo_parts_4
ON demo_parts_3~id = demo_parts_4~id AND
demo_parts_3~value = demo_parts_4~value
WHERE demo_parts_3~value >= 30 AND
demo_parts_3~value 40
ORDER BY demo_parts_3~id
INTO TABLE @DATA(result).
Der Optimizer der SAP-HANA-Datenbank ergänzt die ON-Bedingung implizit um:
AND demo_parts_3~area = demo_parts_4~area
Weiterhin fügt er implizit folgende zusätzliche Filterbedingungen an die WHERE-Bedingung an:
AND demo_parts_3~area >= 3
AND demo_parts_3~area 4
AND demo_parts_4~area >= 3
AND demo_parts_4~area 4
Wenn die Daten der DDIC-Datenbanktabellen entsprechend aufgebaut sind, haben die Abhängigkeitsregeln keinen Einfluss auf die Ergebnismenge.
BAL_S_LOG - Application Log: Log header data General Data in Customer Master
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 11958 Date: 20240523 Time: 155949 sap01-206 ( 114 ms )