10.1. 统一SQL多发转换http接口

10.1.1. 简介

统一SQL开放了一个http接口,用户可以通过该接口获取统一SQL的转换结果,多发执行和比对结果是否一致。

10.1.2. 接口请求地址

http://ip:port/multiplex/transformSql

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

未知异常