@COMPUTE
使用 @COMPUTE 函数可将算术表达式的值返回到目标列。从函数返回的值采用字符串的形式。
将算术 <expression> 的值返回到其他 Oracle GoldenGate 函数时,可以省略 @COMPUTE 短语,如下所示:
@STRNUM ((AMOUNT1 + AMOUNT2), LEFT)
上述语句返回的结果与以下语句返回的结果相同:
@STRNUM ((@COMPUTE (AMOUNT1 + AMOUNT2), LEFT)
算术表达式可以是以下元素的组合。
-
数字
-
包含数字的列的名称
-
返回数字的函数
-
算术运算符:
-
(加号)
-
(减)
-
(乘)
/(除)
(remainder)
-
-
对比运算符:
(大于)
=(大于或等于)
<(小于)
<=(小于或等于)
=(等于)
<>(不等于)
从比较派生的结果可以是零(指示
FALSE)或非零(指示TRUE)。 -
括号(用于对表达式中的结果进行分组)
-
组合运算符
AND、OR。Oracle GoldenGate 仅计算联合表达式的必要部分。语句为FALSE后,将忽略表达式的其余部分。在评估可能缺少或为空的字段时,这可能很有价值。例如,如果COL1的值是25,而COL2的值是10,则可以执行以下操作:@COMPUTE (COL1 > 0 AND COL2 < 3)返回0。@COMPUTE (COL1 < 0 AND COL2 < 3)返回0。从不评估COL2 < 3。@COMPUTE ((COL1 + COL2)/5)返回7。
语法
@COMPUTE (<expression>)
<expression>
有效的算术表达式。数字值加上精度不能大于 17 位数。如果超出此限制,@COMPUTE 将返回类似于以下内容的错误。
2013-08-01 01:54:22 ERROR OGG-01334 Error mapping data from <column> to <column> in function COMPUTE.
示例
示例 1
AMOUNT_TOTAL = @COMPUTE (AMT + AMT2)
示例 2
AMOUNT_TOTAL = @IF (AMT >= 0, AMT * 100, 0)
示例 3
ANNUAL_SALARY = @COMPUTE (MONTHLY_SALARY * 12)
mod(id,10) = 1 MAP otest.tab,TARGET mtest.tab1,FILTER (@compute (id \ 10) = 1)
本示例说明如何实现剩余的 SQL。确保 id \ 10 之间有三个字符的空格,否则将报告为过滤器语法错误。