10.1. 统一SQL多发转换http接口
10.1.1. 简介
统一SQL开放了一个http接口,用户可以通过该接口获取统一SQL的转换结果,多发执行和比对结果是否一致。
10.1.2. 接口请求地址
10.1.3. 请求方式
POST
10.1.4. Content-Type
application/json;charset=UTF-8
10.1.5. 接口请求参数
参数名 |
类型 |
是否必须 |
说明 |
示例 |
---|---|---|---|---|
sourceDialect |
String |
是 |
源端数据库类型 |
oracle/mysql |
dbname |
String |
否 |
多发执行时,会在每个目标数据库下指定的该dbname下执行sql,不填则按照数据源配置中的dbname执行sql |
|
targetDialectInfos |
List<TargetDialectsInPutDTO> |
是 |
目标数据库信息 |
|
sql |
String |
是 |
转换前sql |
|
sqlParameters |
List<BindVariableDTO> |
否 |
预编译sql语句的参数信息 |
TargetDialectsInPutDTO对象结构如下:
参数名 |
类型 |
是否必须 |
说明 |
示例 |
---|---|---|---|---|
targetDialect |
String |
是 |
目标数据库类型加兼容模式 |
lightdb_oracle、gaussdb_oracle、dm、ocean_base_oracle |
targetDbVersion |
String |
否 |
目标数据库版本(目前只有gaussdb_oracle有两个版本:500、505,默认505) |
505 |
multiCompare |
Boolean |
是 |
是否执行多发比对 |
true |
BindVariableDTO对象结构如下:
参数名 |
类型 |
是否必须 |
说明 |
示例 |
---|---|---|---|---|
variableName |
String |
是 |
sql语句的绑定变量名(伪代码SQL中的@绑定变量的名字) |
name |
variableType |
Integer |
是 |
预编译sql语句的绑定变量参数值类型(java.sql.Types中的具体值)支持范围见如下:数据类型支持范围和java.sql.Types映射值章节 |
12 |
value |
Object |
是 |
预编译sql语句的绑定变量参数的内容 |
测试 |
10.1.6. 数据类型支持范围和java.sql.Types映射值章节
variableType支持的数据类型映射值如下:
字段类型 |
java.sql.Types |
variableType值(对应java.sql.Types值) |
---|---|---|
BINARY_FLOAT、FLOAT、REAL |
Types.FLOAT |
6 |
BINARY_DOUBLE、DOUBLE、DOUBLE PRECISION |
Types.DOUBLE |
8 |
CHAR、CHARACTER |
Types.CHAR |
1 |
NCHAR |
Types.NCHAR |
-15 |
NVARCHAR、NVARCHAR2、NCHAR VARYING |
Types.NVARCHAR |
-9 |
VARCHAR、VARCHAR2、TINYTEXT |
Types.VARCHAR |
12 |
TINYINT 、INT1 |
Types.TINYINT |
-6 |
SMALLINT 、INT2 |
Types.SMALLINT |
5 |
INTEGER、INT、INT3、MEDIUMINT、INT4 |
Types.INTEGER |
4 |
BIGINT、INT8 |
Types.BIGINT |
-5 |
BLOB |
Types.BLOB |
2004 |
CLOB |
Types.CLOB |
2005 |
DECIMAL、DEC、NUMBER、NUMERIC |
Types.DECIMAL |
3 |
DATE |
Types.DATE |
91 |
TIME |
Types.TIME |
92 |
TIMESTAMP、DATETIME、TIMESTAMP(p) WITH TIME ZONE |
Types.TIMESTAMP |
93 |
ROWID |
Types.ROWID |
-8 |
BOOL、BOOLEAN |
Types.BOOLEAN |
16 |
TEXT、MEDIUMTEXT、LONGTEXT |
Types.LONGVARCHAR |
-1 |
10.1.7. 请求示例
{
"sourceDialect": "oracle",
"targetDialectInfos": [
{
"targetDialect": "lightdb_oracle",
"targetDbVersion": "",
"multiCompare": false
}
,
{
"targetDialect": "gaussdb_oracle",
"targetDbVersion": "500",
"multiCompare": true
}
,
{
"targetDialect": "gaussdb_oracle",
"targetDbVersion": "505",
"multiCompare": true
}
,
{
"targetDialect": "dm",
"targetDbVersion": "",
"multiCompare": true
}
,
{
"targetDialect": "ocean_base_oracle",
"targetDbVersion": "",
"multiCompare": true
}
],
"sql": "select id,name from unisql_test where id=@id and name=@name order by id",
"sqlParameters": [
{
"variableName": "id",
"variableType": 4,
"value": 1
}
,
{
"variableName": "name",
"variableType": 12,
"value": "测试"
}
]
}
10.1.8. 接口返回参数
参数名 |
类型 |
是否必须 |
说明 |
示例 |
---|---|---|---|---|
code |
int |
是 |
状态码,0成功,其他异常 |
0 |
message |
String |
是 |
信息描述 |
转换成功,无需比对/成功,比对报告结果一致 |
data |
MultiplexOutPutDTO |
否 |
统一SQL多目标库转换后信息实体 |
MultiplexOutPutDTO对象结构如下:
参数名 |
类型 |
是否必须 |
说明 |
示例 |
---|---|---|---|---|
sourceDialect |
String |
是 |
源端数据库类型 |
oracle/mysql |
targetDialectInfos |
List<TargetDialectsOutPutDTO> |
是 |
目标数据库信息 |
|
traceId |
String |
否 |
用于查询比对报告的ID |
84cbb67ad75b47b689445f33c3d4cef3 |
TargetDialectsOutPutDTO对象结构如下:
参数名 |
类型 |
是否必须 |
说明 |
示例 |
---|---|---|---|---|
targetDialect |
String |
是 |
目标数据库类型加兼容模式 |
lightdb_oracle、gaussdb_oracle、dm、ocean_base_oracle |
targetDbVersion |
String |
否 |
目标数据库版本(目前只有gaussdb_oracle有两个版本:500、505,默认505) |
505 |
multiCompare |
Boolean |
是 |
是否执行多发比对 |
true |
sql |
String |
是 |
转换后sql |
10.1.9. 返回示例
{
"code": 0,
"data": {
"sourceDialect": "oracle",
"targetDialectInfos": [
{
"targetDialect": "lightdb_oracle",
"targetDbVersion": "",
"multiCompare": false,
"sql": "SELECT id,name FROM unisql_test WHERE id=@id AND name=@name ORDER BY id"
},
{
"targetDialect": "GAUSSDB500_ORACLE",
"targetDbVersion": "500",
"multiCompare": true,
"sql": "SELECT id,name FROM unisql_test WHERE id=@id AND name=@name ORDER BY id"
},
{
"targetDialect": "gaussdb_oracle",
"targetDbVersion": "505",
"multiCompare": true,
"sql": "SELECT id,name FROM unisql_test WHERE id=@id AND name=@name ORDER BY id"
},
{
"targetDialect": "dm",
"targetDbVersion": "",
"multiCompare": true,
"sql": "select id,name from unisql_test where id=@id and name=@name order by id"
},
{
"targetDialect": "ocean_base_oracle",
"targetDbVersion": "",
"multiCompare": true,
"sql": "select id,name from unisql_test where id=@id and name=@name order by id"
}
],
"traceId": "a4784f429cb24c668024c8e954440fff"
},
"message": "成功,比对结果一致"
}
10.1.10. 错误码
错误码 |
描述 |
---|---|
0 |
转换成功,无需比对/成功,比对报告结果一致 |
10000 |
入参不能为空! |
10001 |
目标数据库信息[targetDialectInfos]不能为空! |
10002 |
目标数据库类型[targetDialect]不能为空! |
10003 |
目标数据库类型[%s]暂不支持! |
10004 |
源端数据库类型[%s]输入不正确,目前只持支oracle,mysql! |
10005 |
输入的源sql不能为空! |
10006 |
绑定变量名[variableName]不能为空! |
10007 |
绑定变量类型[%d]不支持! |
20000 |
源库[%s]到目标库[%s]转换失败 |
30000 |
多发数据库执行异常 |
40002 |
获取比对结果失败! |
40003 |
比对服务地址未授权 |
40004 |
参数值[TraceId]不能为空 |
40005 |
比对报告结果不一致,可通过traceId,前往比对报告界面查看比对结果 |
40006 |
查询比对报告结果时出现异常 |
40007 |
比对报告结果获取超时 |
-1 |
未知异常 |