@COMPUTE
Utilice la función @COMPUTE para devolver el valor de una expresión aritmética a una columna de destino. El valor devuelto de la función tiene el formato de una cadena.
Puede omitir la frase @COMPUTE al devolver el valor de una <expression> aritmética a otra función de Oracle GoldenGate, como en:
@STRNUM ((AMOUNT1 + AMOUNT2), LEFT)
El resultado anterior devuelve el mismo resultado que:
@STRNUM ((@COMPUTE (AMOUNT1 + AMOUNT2), LEFT)
Las expresiones aritméticas pueden ser combinaciones de los siguientes elementos.
-
Números
-
Los nombres de las columnas que contienen números
-
Funciones que devuelven números
-
Operadores aritméticos:
-
(más)
-
(menos)
-
(símbolo de multiplicación)
/ (dividir)
(remainder)
-
-
Operador de comparación:
(mayor que)
= (mayor o igual que)
< (menor de que)
<= (menor que o igual a)
= (igual)
<> (no es igual a)
Los resultados derivados de las comparaciones pueden ser cero (indicando
FALSE) o distinto de cero (indicandoTRUE). -
Paréntesis (para agrupar los resultados en la expresión)
-
Los operadores de conjunción
AND,OR. Oracle GoldenGate solo evalúa la parte necesaria de una expresión de conjunción. Una vez que una sentencia esFALSE, se ignora el resto de la expresión. Esto puede resultar útil al evaluar campos que pueden faltar o ser nulos. Por ejemplo, si el valor deCOL1es25y el valor deCOL2es10, se pueden realizar las siguientes acciones:@COMPUTE (COL1 > 0 AND COL2 < 3)devuelve0.@COMPUTE (COL1 < 0 AND COL2 < 3)devuelve0.COL2 < 3nunca se evalúa.@COMPUTE ((COL1 + COL2)/5)devuelve7.
Sintaxis
@COMPUTE (<expression>)
<expression>
Expresión aritmética válida. El valor numérico más la precisión no puede superar los 17 dígitos. Si se supera este límite, @COMPUTE devuelve un error similar al siguiente.
2013-08-01 01:54:22 ERROR OGG-01334 Error mapping data from <column> to <column> in function COMPUTE.
Ejemplos
Ejemplo 1
AMOUNT_TOTAL = @COMPUTE (AMT + AMT2)
Ejemplo 2
AMOUNT_TOTAL = @IF (AMT >= 0, AMT * 100, 0)
Ejemplo 3
ANNUAL_SALARY = @COMPUTE (MONTHLY_SALARY * 12)
mod(id,10) = 1 MAP otest.tab,TARGET mtest.tab1,FILTER (@compute (id \ 10) = 1)
En este ejemplo se muestra cómo lograr el SQL restante. Asegúrese de que haya un espacio entre id \ 10 en los tres caracteres; de lo contrario, se informará como un error de sintaxis de filtro.