@EVAL
Verwenden Sie die Funktion @EVAL, um einen Wert basierend auf einer Reihe unabhängiger Tests auszuwählen. Die Anzahl der Bedingungen, die Sie testen können, ist beliebig. Wenn die Anzahl der Fälle groß ist, listen Sie zuerst die am häufigsten auftretenden Bedingungen auf, um die beste Performance zu erzielen.
Für diese Funktion unterstützt Oracle GoldenGate die Verwendung einer Escape-Sequenz zur Darstellung von Zeichen in einer Zeichenfolgenspalte in Unicode oder in der nativen Zeichencodierung der Betriebssysteme Microsoft Windows, UNIX und Linux. Die Zielspalte muss ein SQL-Unicode-Datentyp sein, wenn ein Argument als Unicode angegeben wird.
Syntax
@EVAL (<condition>, <result>
[<condition>, <result>] [, ....]
[, <default_result>])
<condition>
Ein bedingter Test mit standardmäßigen Bedingungsoperatoren. Es können mehrere Bedingungen angegeben werden.
<result>
Ein Wert oder eine Zeichenfolge, die basierend auf den Ergebnissen des bedingten Tests zurückgegeben wird. Schließen Sie Literale in einfache Anführungszeichen ein. Geben Sie ein Ergebnis für jede verwendete Bedingung an.
<default_result>
Ein Standardergebnis, das zurückgegeben wird, wenn keine der Bedingungen erfüllt ist. Ein Standardergebnis ist optional.
##
Beispiele
Wenn im folgenden Beispiel die Spalte AMOUNT größer als 10000 ist, wird das Ergebnis high amount zurückgegeben. Wenn AMOUNT größer als 5000 (und kleiner als oder gleich 10000) ist, wird ein Ergebnis von somewhat high zurückgegeben (es sei denn, die vorherige Bedingung wurde erfüllt). Wenn keine Bedingung erfüllt ist, wird eine COLUMN_MISSING-Anzeige zurückgegeben, weil kein Standardergebnis angegeben ist.
AMOUNT_DESC = @EVAL (AMOUNT > 10000, 'high amount', AMOUNT > 5000, 'somewhat high')
Im Folgenden finden Sie eine Änderung des vorhergehenden Beispiels. Es gibt dieselben Ergebnisse zurück, mit der Ausnahme, dass ein Standardwert angegeben ist, und ein Ergebnis von lower wird zurückgegeben, wenn AMOUNT kleiner oder gleich 5000 ist.
@EVAL (AMOUNT > 10000, 'high amount', AMOUNT > 5000, 'somewhat high', 'lower')