-
Notifications
You must be signed in to change notification settings - Fork 137
Closed
Labels
Description
方案(实现)
logminer获取Oracle DML SQL,使用 pincapParseSQL解析获取到schema/table,获取column name 和 column value,构造为where []interface{} list 和 newValue []interface{} list
SQL支持度
1.DML操作类型
| DML类型 | option | Oracle SQL | MySQL SQL | 其他 |
|---|---|---|---|---|
| INSERT | INSERT INTO TEST.CHARACTER_256_COLUMNS VALUES (4, NULL); | replace into TEST.CHAR_256_COLUMNS(COL1, COL2)values(?, ?) |
args=[0, ] | |
| UPDATE | UPDATE TEST.CHAR_20000_COLUMNS SET COL2='a a b ' WHERE COL1=2; | update TEST.CHAR_256_COLUMNS setCOL1=?, COL2=?where((COL1 = ?) and (COL2 = ?)) limit 1 |
args=[3, "a a b ", 3, "a a a "] | |
| DELETE | DELETE FROM TEST.CHAR_256_COLUMNS WHERE COL1 = 5; | delete from TEST.CHAR_256_COLUMNS where((COL1 = ?) and (COL2 = ?)) limit 1 |
args=[5, "ABCDEFGHIJKLMNOPQRSTUVWXYZ "] |
2.字段类型
| Oracle | MySQL | 是否支持 | 不支持原因(限制) | 是否考虑支持 |
|---|---|---|---|---|
| BFILE | VARCHAR(255) | 否 | logminer不支持 | 否 |
| BINARY_FLOAT | float | 否(insert 支持) | mysql 不支持Inf/-Inf/Nan数据,MySQL float类型无法精确匹配,导致更新失败(可修复) | 是 |
| BINARY_DOUBLE | float | 是 | mysql 不支持Inf/-Inf/Nan数据 | |
| BLOB | BLOB | 否 | 无法从redoSQL获取足够的值 | 是 |
| CHAR(n), CHARACTER(n) | CHAR(n), CHARACTER(n) | 是 | ||
| CLOB | CLOB | 否 | 无法从redoSQL获取足够的值 | 是 |
| DATE | datetime | 是 | 已支持 | |
| DECIMAL(p,s), DEC(p,s) | DECIMAL(p,s), DEC(p,s) | 是 | 已支持 | |
| DOUBLE PRECISION | DOUBLE PRECISION | 否 | 是 | |
| FLOAT(p) | DOUBLE | 是 | ||
| INTEGER, INT | INT | 是 | 极值问题 | |
| INTERVAL YEAR(p) TO MONTH | VARCHAR(30) | 是 | ||
| INTERVAL DAY(p) TO SECOND(s) | VARCHAR(30) | 是 | ||
| LONG | LONGTEXT | 是 | 已支持 | |
| LONG RAW | LONGBLOB | 否(insert 支持) | update/delete失败原因与函数HEXTORAW相关 | 是 |
| NCHAR(n) | NCHAR(n)/NVARCHAR(n) | 是 | 中英文混合不支持 | 是 |
| NCHAR VARYING(n) | NCHAR VARYING(n) | 是 | 中英文混合不支持 | 是 |
| NCLOB | NCLOB | 否 | 无法从redoSQL获取足够的值 | 是 |
| NUMBER(p,0), NUMBER(p) | TINYINT/SMALLINT/INT/BIGINT/DECIMAL(p) | 是 | 已支持 | |
| NUMBER(p,s) | DECIMAL(p,s) | 是 | ||
| NUMBER, NUMBER(*) | DOUBLE | 是 | ||
| NUMERIC(p,s) | NUMERIC(p,s) | 是 | ||
| NVARCHAR2(n) | NVARCHAR(n) | 是 | ||
| RAW(n) | VARBINARY(n) | 是 | ||
| REAL | DOUBLE | 是 | ||
| ROWID | CHAR(100) | 是 | ||
| SMALLINT | DECIMAL(38) | 是 | ||
| TIMESTAMP(p) | datetime | 是 | ||
| TIMESTAMP(p) WITH TIME ZONE | datetime | 否 | 时区未解析 | 是 |
| UROWID(n) | VARCHAR(n) | 否 | logminer不支持,redoSQL解析读取结果为"insert into "TEST"."UROWID_COLUMNS"("COL1","COL2") values('1',Unsupported Type) | 否 |
| VARCHAR(n) | VARCHAR(n) | 是 | ||
| VARCHAR2(n) | VARCHAR(n) | 是 |
- 支持同步值带函数的DML support sync DML with function #814
- 字符支持
特殊字符支持 ~`!@#$%^&*()-=_+{}[]|:;<>,.?/
中文不支持NCHAR/NCHAR VARYING/NVARCHAR2 不支持中英文混合类型字段更新