OGG实时同步当源端字段值为1时,目标端该字段改为0 ,当源端字段为0或空值时,目标端该字段改为1,这个好通过OGG参数去实现吗?
或者是通过触发器去实现?但是数据库主机资源紧张,用触发器会占用资源。
上一个回复使用char字段,发现null无法进行转换,如下测试表字段类型转换为varchar2,使用上面大佬说的两种参数,可以参照如下。
使用EVAL
SQL> desc test1
Name Null? Type
ID NUMBER(38)
NAME VARCHAR2(10)
SQL> insert into test1(id) values(7);
SQL> insert into test1 values(8,null);
SQL> insert into test1 values(9,1);
SQL> insert into test1 values(10,‘1’);
SQL> insert into test1 values(11,‘0’);
map test2.test1, target test2.test1,COLMAP(usedefaults,NAME=@EVAL(NAME=‘1’,‘0’,NAME=‘0’,‘1’,‘1’));
ID NAME
7 1
8 1
9 0
10 0
11 1
map test2.test1, target test2.test1,COLMAP(usedefaults,NAME=@case(NAME,‘1’,‘0’,‘0’,‘1’,‘1’));
SQL> insert into test1(id) values(12);
SQL> insert into test1 values(13,null);
SQL> insert into test1 values(14,‘1’);
SQL> insert into test1 values(15,‘0’);
12 1
13 1
14 0
15 1
评论
有用 0
能再详细点吗,@Eval,@ If这两个参数怎么用?
当源端字段值为1时,目标端该字段改为0,replicate配置:COLMAP (“CUSTOMER_ID”=“ORG_CUSTOMER_ID”, USEDEFAULTS, “CUST_NAME”=“CUST_NAME”, “ORG_ID”=“ORG_ID”, USEDEFAULTS,ENABLED=@CASE(SELF_IS_QCH,“1”,“0”));
另外一种情况,当源端字段为0或空值时,目标端该字段改为1,这个如何配置?
评论
有用 0试着这样配置:
COLMAP (“CUSTOMER_ID”=“ORG_CUSTOMER_ID”, USEDEFAULTS, “CUST_NAME”=“CUST_NAME”, “ORG_ID”=“ORG_ID”, USEDEFAULTS,ENABLED = @EVAL (“SELF_IS_QCH”=1,“0”,“SELF_IS_QCH”=0,“1”,“SELF_IS_QCH”=NULL,“1”));
结果报错:
2021-03-22 10:33:06 INFO OGG-01298 Oracle GoldenGate Delivery for MySQL, rep1.prm: Column function diagnostic message: could not find column “0”.
2021-03-22 10:33:06 ERROR OGG-00919 Oracle GoldenGate Delivery for MySQL, rep1.prm: Error in COLMAP clause.
评论
有用 0map test2.test1, target test2.test1,COLMAP(usedefaults,CC=@case(CC,‘1’,‘0’,‘0’,‘1’,‘1’));
Source
SQL> insert into test1 values(1,1);
1 row created.
SQL> commit;
Target
select * from test1;
ID CC
1 0
Source
SQL> insert into test1 values(2,0);
SQL> insert into test1(id) values(3);
SQL> insert into test1 values(4,null);
Target
ID CC
1 0
2 1
3
4
参考
https://docs.oracle.com/en/middleware/goldengate/core/19.1/reference/case.html#GUID-6517C335-E905-4FF1-83A8-72D785AFB536
评论
有用 0
墨值悬赏

