Ansicht
Dokumentation
DYNSQL_GENERATE_WHERE_CLAUSE - Dynamische SQL-Generierung (->ADK)
BAL Application Log Documentation TXBHW - Original Tax Base Amount in Local CurrencyDiese Dokumentation steht unter dem Copyright der SAP AG.
Funktionalität
Dieser Funktionsbaustein generiert abhängig von Steuertabellen eine Where-Clause als interne Tabelle (WHERE_CLAUSE) für ein Select mit dynamischem SQL.
Beispiel
Als Eingabe wird eine interne Tabelle benötigt (CONTROL_TABLE), in der für verschiedene Kombinationen von zwei Schlüsselfeldern Werte für Bedingungen hinterlegt sind. Beispielsweise für die Archivierung der Materialbelege (Report RS07MARC) wird die Tabelle mit Kombinationen von Vorgangsart und Werk gefüllt, für die je ein Datum des frühesten Zeitpunkts der Archivierung festgelegt ist. Der Funktionsbaustein generiert für die in dieser Tabelle definierten Bedingungen die entsprechende Where-Clause.
Aus einer Steuertabelle (CONTROL_TABLE) mit den beiden Einträgen
FELD1 FELD2 FELD3 |
---|
WA 0001 19980101 |
WE 0100 19980505 |
liefert der Aufruf
CALL FUNCTION 'DYNSQL_GENERATE_WHERE_CLAUSE'
EXPORTING
FIELDNAME_KEY_1 = 'VGART'
FIELDNAME_KEY_2 = 'WERKS'
FIELDNAME_VALUE = 'BUDAT'
OPERATOR
= '<='
TABLES
WHERE_CLAUSE = DYN_SQL
CONTROL_TABLE = ZTVARA
ALL_VALUES_KEY_1 = VGART_ALL
VALUES_KEY_1 = VGART_TEIL
ALL_VALUES_KEY_2 = WERKS_ALL
VALUES_KEY_2 = WERKS_TEIL
EXCEPTIONS
WHERE_CLAUSE_TOO_LARGE = 1
WRONG_ENTRY_IN_CONTROL_TABLE = 2
KEY_VALUES_INCONSISTENT = 3
NO_ENTRY_FOUND = 4
FUNCTION_ALREADY_CALLED = 5.
die folgende Where-Clause zurück:
BUDAT <= '19980101' AND VGART = 'WA' AND WERKS = '0001' OR |
BUDAT <= '19980505' AND VGART = 'WE' AND WERKS = '0100' |
Damit nicht jede Kombination der Schlüsselfelder einzeln übergeben werden muß, sind generische Werte für die Schlüssel möglich. Die generischen Schlüssel werden mit Hilfe der vier weiteren Eingabetabellen behandelt. Pro Schlüssel werden dazu die Tabellen ALL_VALUES_KEY_1 bzw. ALL_VALUES_KEY_2 und VALUES_KEY_1 bzw. VALUES_KEY_2 benötigt. In ALL_VALUES_KEY_1 müssen alle auf der Datenbank vorhandenen Werte für den ersten Schlüssel und in VALUES_KEY_1 nur die Werte, die in der Where-Clause berücksichtigt werden sollen, übergeben werden. Für die generischen Werte der Schlüssel gilt, daß diese immer durch eindeutigere Einträge übersteuert werden. Die Steuertabelle mit
FELD1 FELD2 FELD3 |
---|
W* * 19980101 |
WA 010* 19980505 |
und den übrigen Eingabetabellen mit den Einträgen
ALL_VALUES_KEY_1 : WA , WE , WI , WL |
VALUES_KEY_1 : WA , WE , WI |
ALL_VALUES_KEY_2 : 0001, 0100, 0101, 0102 |
VALUES_KEY_2 : 0001, 0100, 0101, 0102 |
ergibt die Where-Clause:
BUDAT <= '19980101' AND ( VGART BETWEEN 'WE' AND 'WL' OR
VGART = 'WA' AND WERKS = '0001' ) OR
BUDAT <= '19980505' AND VGART = 'WA' AND
WERKS BETWEEN '0100' AND '0102'
Alle Bedingungen werden, um die Where-Clause möglichst kompakt zu halten, mit Hilfe von BETWEEN eingegrenzt. Wenn in der Steuertabelle zwei verschiedene generische Einträge für eine Kombination der Schlüsselfelder vorhanden sind, dann wird der Eintrag berücksichtigt, für den der Schlüssel 1 eindeutiger ist. Eine Steuertabelle mit
FELD1 FELD2 FELD3 |
---|
* 0001 19980101 |
WA * 19980505 |
und den übrigen Eingabetabellen wie oben ergibt:
BUDAT <= '19980101' AND VGART BETWEEN 'WE' AND 'WI' AND
WERKS = '0001' OR
BUDAT <= '19980505' AND VGART = 'WA'
Für die Auftragsart 'WA' und die Verkaufsorganisation '0001' gilt damit das Buchungsdatum '19980505'. Neben der Bedingung die in der Where-Clause aufgenommen wird können mit der CONTROL_TABLE zwei weitere Felder übergeben werden. Mit Hilfe des Funktionsbausteins DYNSQL_READ_CONTROL_TABLE können diese Werte dann für jede Kombination der beiden Schlüsselfelder ausgelesen werden.
Parameter
ALL_VALUES_KEY_1ALL_VALUES_KEY_2
CONTROL_TABLE
FIELDNAME_KEY_1
FIELDNAME_KEY_2
FIELDNAME_VALUE
KEY_1_IS_IN_WHERE_CLAUSE
KEY_2_IS_IN_WHERE_CLAUSE
OPERATOR
PRIO_FELD
VALUES_KEY_1
VALUES_KEY_2
WHERE_CLAUSE
Ausnahmen
DYNSQL_TOO_LARGEFUNCTION_ALREADY_CALLED
KEY_VALUES_INCONSISTENT
NO_ENTRY_FOUND
WRONG_ENTRY_IN_CONTROL_TABLE
Funktionsgruppe
DYNSTXBHW - Original Tax Base Amount in Local Currency General Data in Customer Master
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 10308 Date: 20240523 Time: 150837 sap01-206 ( 89 ms )