@COMPUTE
Verwenden Sie die Funktion @COMPUTE, um den Wert eines arithmetischen Ausdrucks an eine Zielspalte zurückzugeben. Der von der Funktion zurückgegebene Wert hat die Form einer Zeichenfolge.
Sie können die Phrase @COMPUTE weglassen, wenn Sie den Wert einer arithmetischen <expression> an eine andere Oracle GoldenGate-Funktion zurückgeben, wie in:
@STRNUM ((AMOUNT1 + AMOUNT2), LEFT)
Das vorhergehende Ergebnis wird wie folgt zurückgegeben:
@STRNUM ((@COMPUTE (AMOUNT1 + AMOUNT2), LEFT)
Arithmetische Ausdrücke können Kombinationen der folgenden Elemente sein.
-
Zahlen
-
Die Namen der Spalten, die Zahlen enthalten
-
Funktionen, die Zahlen zurückgeben
-
Arithmetische Operatoren:
-
(Plus)
-
(Minus)
-
(Mal)
/ (dividieren)
(remainder)
-
-
Vergleichsoperatoren:
(größer als)
= (Größer als oder gleich)
<(kleiner als)
<= (kleiner als oder gleich)
= (Gleich)
<> (nicht gleich)
Ergebnisse, die aus Vergleichen abgeleitet werden, können Null (mit Angabe von
FALSE) oder ungleich Null (mit Angabe vonTRUE) sein. -
Klammern (zur Gruppierung von Ergebnissen im Ausdruck)
-
Die Konjunktionen
AND,OR. Oracle GoldenGate wertet nur den erforderlichen Teil eines Konjunktionausdrucks aus. Sobald eine AnweisungFALSElautet, wird der Rest des Ausdrucks ignoriert. Dies kann nützlich sein, wenn Felder ausgewertet werden, die fehlen oder Null sein können. Beispiel: Wenn der Wert vonCOL125ist und der Wert vonCOL210lautet, sind folgende Optionen möglich:@COMPUTE (COL1 > 0 AND COL2 < 3)gibt0zurück.@COMPUTE (COL1 < 0 AND COL2 < 3)gibt0zurück.COL2 < 3wird nie ausgewertet.@COMPUTE ((COL1 + COL2)/5)gibt7zurück.
Syntax
@COMPUTE (<expression>)
<expression>
Ein gültiger arithmetischer Ausdruck. Der numerische Wert plus die Gesamtstellenzahl darf nicht mehr als 17 Stellen umfassen. Wenn dieser Grenzwert überschritten wird, gibt @COMPUTE eine Fehlermeldung wie die Folgende zurück.
2013-08-01 01:54:22 ERROR OGG-01334 Error mapping data from <column> to <column> in function COMPUTE.
Beispiele
Beispiel 1
AMOUNT_TOTAL = @COMPUTE (AMT + AMT2)
Beispiel 2
AMOUNT_TOTAL = @IF (AMT >= 0, AMT * 100, 0)
Beispiel 3
ANNUAL_SALARY = @COMPUTE (MONTHLY_SALARY * 12)
mod(id,10) = 1 MAP otest.tab,TARGET mtest.tab1,FILTER (@compute (id \ 10) = 1)
In diesem Beispiel wird veranschaulicht, wie Sie den verbleibenden SQL-Code erreichen. Stellen Sie sicher, dass die drei Zeichen ein Leerzeichen zwischen id \ 10 enthalten. Andernfalls wird es als Filtersyntaxfehler gemeldet.