1 Star 0 Fork 551

柳叶一刀 / dbswitch

forked from dromara / dbswitch 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
INTERFACE.md 43.04 KB
一键复制 编辑 原始数据 按行查看 历史
tangyibo 提交于 2020-05-29 22:14 . 文档更新

dbswitch-weibapi接口调用说明文档

目录

一、功能描述

1、SQL语句的分类

  • DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
  • DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
  • DCL—数据控制语言(USER,GRANT,REVOKE,COMMIT,ROLLBACK)

2、sql 语句大小写问题

  • 关键字不区分大小写,例如: select ,from, 大小写均可
  • 标识符区分大小写,例如:表名,列名
  • 标识符如果不加英文双引号,表名字段名默认是按大写执行
  • 标识符如果加英文双引号,则表名字段名是按原始大小写执行

3、支持的功能

  • 支持标准SQL语法DML/DDL(部分)格式与MySQL/Oralce/PostgreSQL/SqlServer/Greenplum数据库语法的转换;
  • 通过给定的数据库连接信息获取相关的元信息数据(模式列表信息、表或视图信息、字段列信息、主键信息等);
  • 异构数据库建根据表结构分析对应数据库的建表语句等;
  • 基于函数式的DDL建表/改表/删表/清表的SQL拼接生成;
  • 允许使用?占位符进行DML类的SQL进行语法转换;
  • 异构数据向PostgreSQL/Greenplum的表结构与数据的迁移;

4、标准SQL参考

  • 参考地址:SQL99参考地址

  • SQL书写建议:表名及字段名用双引号"进行包裹

二、不支持的功能描述

1、不支持的功能总述

  • 全部的DCL类的SQL转换

Oracle建帐号User牵涉表空间;Greenplum建帐号需要修改pg_hba.conf配置文件支持外部可访问等;

解决方法: 具体问题具体分析;

  • 非标准的DDL类SQL的转换

牵涉数据库的专用数据类型

解决方法: 具体问题具体分析;

2、建表语句不能完全支持所有数据类型

因牵涉数据库的专用数据类型,需要在标准管理中使用底层数据库支持的数据类型建表; 不同数据库支持的数据类型整理见附录一;

解决方法: 此问题为规则增加问题,发现问题可按照BUG处理;

3、建表时的表与字段注释问题不完全支持

当前MySQL支持在create table中使用comment 设置字段中文注释; 在Oracle/Greenplum需要使用单独的COMMENT ON TABLE、COMMENT ON COLUMN命令设置;

解决方法: 不是问题,因在标准管理中的表的注释信息存储在MySQL配置库中;

4、表主键的修改问题

MySQL/Oracle数据库允许直接使用修改,但Greenplum需要先将主键删除后再添加,不支持修改;

解决方法: 考虑单独处理;

5、数据库结构转换的兼容性问题

  • oracle中 VARCHAR2(4000) 类型可以作为主键,在MySQL中varchar做主键最大长度为255 ;
  • 在MySQL数据库中text、varchar(>255)、blob等类型不允许做主键 ;
  • 在Greenplum中分布式键不允许修改;
  • 在MySQL数据库中varchar类型的总长度不应大于65535
  • 整理中....

解决方法: 出现的案例及其少见,考虑人工干预处理;

三、支持的数据库

  • SQL语法转换部分
数据库名称 数据库英文 简写 数据库版本
甲骨文数据库 oracle oracle >=12c
微软SqlServer SqlServer sqlserver >=2012
MySQL数据库 mysql mysql >=5.7
PostgreSQL PostgreSQL postgresql >=9.0
Greenplum Greenplum greenplum >=6.0

注:Greenplum绝大多数语法同PostgreSQL的语法。

  • 异构库表结构转换部分
数据库名称 数据库英文 简写 数据库版本
甲骨文数据库 oracle oracle >=9i
微软SqlServer SqlServer sqlserver >=2000
MySQL数据库 mysql mysql >=5.5
PostgreSQL PostgreSQL postgresql >=9.0
  • 数据库的自增字段与时间字段默认当前时间问题

(1) MySQL5.7数据库

CREATE TABLE `t_test_mysql_table` (
	`id` int NOT NULL AUTO_INCREMENT, 
	`name` varchar(1024),
	`tm` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
	 PRIMARY KEY (`id`)
)

(2) Oracle12c数据库

CREATE TABLE "ZFXFZB"."t_test_oracle_table" (
	"id" NUMBER  GENERATED BY DEFAULT ON NULL AS IDENTITY , 
	"name" varchar(1024),
	"tm" TIMESTAMP (0) DEFAULT sysdate, 
	 PRIMARY KEY ("id")
)

(3) PostgreSQL/Greenplum数据库

CREATE TABLE "private"."t_test_postgres_table" (
	"id" serial NOT NULL, 
	"name" text,
	"tm" TIMESTAMP (0) DEFAULT '(now())', 
	 PRIMARY KEY ("id")
)

四、错误异常返回

所有接口均存在异常情况,定义的异常返回格式如下:

{
  "errcode": -1,
  "errmsg": "Invalid JSON format:expect ':' at 0, name source:"
}
字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息

五、SQL语法转换部分接口

1、标准DML类SQL语句转换

URI: http://host:port/sql/standard/dml

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 备注说明
target string 目的库类型 标准SQL语句,支持mysql/oralce/sqlserver/posgresql/greenplum
sql string SQL语句 标准DML类SQL语句

Request Example:

{
    "target":"oracle",
    "sql":"select * from TEST_TABLE limit 10 offset 20"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
sql string 指定数据库语法的SQL 指定数据库语法的SQL

Response Example:

{
  "errcode": 0,
  "data": {
    "sql": "SELECT * FROM \"TEST_TABLE\" OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY"
  },
  "errmsg": "success"
}

Supported Notice:

以下支持的SQL类型均支持使用?预编译模式的SQL转换。

  • Select语句

支持where、like、order by、group by、having、count()、sum()、avg()、max()、min()、union、distinct、and/or、>、=、<、(not) in、as、INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN、UNION ALL、limit/offset、between/and、is (not) null、 通配符(%_)、子查询、中文值;

不支持特定数据库专用的函数,例如MySQL的now()、oracle的sysdate等;

特殊说明 对于查询分页问题,对于Oracle只支持12c及其以上版本;标准分页的语句为limit a offset b;

  • Insert语句

支持VALUES、INSERT INTO SELECT FROM、

  • Update语句

支持where、like、and/or、>、=、<、(not) in

  • Delete语句

支持where、like、and/or、>、=、<、(not) in

2、标准DDL类SQL语句转换

URI: http://host:port/sql/standard/ddl

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 备注说明
target string 目的库类型 标准SQL语句,支持mysql/oralce/sqlserver/posgresql/greenplum
sql string SQL语句 标准SQL语句

Request Example:

{
    "target":"oracle",
    "sql":"create or replace view v_xxxx as (select xgh,name,sex from test_table where shenfen='student')"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
sql string 指定数据库语法的SQL 指定数据库语法的SQL

Response Example:

{
  "errcode": 0,
  "data": {
    "sql": "CREATE OR REPLACE VIEW \"V_XXXX\" AS\nSELECT \"XGH\", \"NAME\", \"SEX\"\nFROM \"TEST_TABLE\"\nWHERE \"SHENFEN\" = 'student'",
  },
  "errmsg": "success"
}

Supported Notice:

  • 用于与数据库的数据类型无关的DDL类SQL转换,如:create view、 create table as select * from table、drop view、drop table等等,但不支持truncate table、alter table等;
  • 因受限于不同数据库的数据类型的差异,这里并不支持特定的建表、改表、清表的SQL语句转换,此部分需要使用第7部分的接口来弥补;

3、[调试使用]标准DML类SQL语句转换

URI: http://host:port/sql/debug/standard/dml

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 备注说明
sql string SQL语句 标准DML类SQL语句

Request Example:

{
    "sql":"select * from TEST_TABLE limit 10 offset 20"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
oracle string Oracle语法的SQL Oracle语法的SQL
postgresql string postgresql语法的SQL postgresql语法的SQL
mysql string mysql语法的SQL mysql语法的SQL

Response Example:

{
  "errcode": 0,
  "data": {
    "sql": {
      "oracle": "SELECT * FROM \"TEST_TABLE\" OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY",
      "postgresql": "SELECT * FROM \"TEST_TABLE\" OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY",
      "mysql": "SELECT * FROM `TEST_TABLE` LIMIT 10 OFFSET 20"
    }
  },
  "errmsg": "success"
}

4、[调试使用]指定数据库的DML类SQL语句转换

URI: http://host:port/sql/debug/special/dml

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 备注说明
source string 源库类型 源库类型,支持mysql/oralce/sqlserver
target string 目的库类型 标准SQL语句,支持mysql/oralce/sqlserver/posgresql/greenplum
sql string SQL语句 源库语法的SQL语句

Request Example:

{
    "source":"mysql",
    "target":"oracle",
    "sql":"select * from `test_table`"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
sql string 对应数据库语法的SQL 对应数据库语法的SQL

Response Example:

{
  "errcode": 0,
  "data": {
    "sql": "SELECT * FROM \"test_table\""
  },
  "errmsg": "success"
}

5、[调试使用]标准DDL类SQL语句转换

URI: http://host:port/sql/standard/ddl

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 备注说明
sql string SQL语句 标准SQL语句

Request Example:

{
   "sql":"create or replace view v_xxxx as (select xgh,name,sex from test_table where shenfen='student')"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
oracle string Oracle语法的SQL Oracle语法的SQL
postgresql string postgresql语法的SQL postgresql语法的SQL
mysql string mysql语法的SQL mysql语法的SQL

Response Example:

{
  "errcode": 0,
  "data": {
    "sql": {
      "oracle": "CREATE OR REPLACE VIEW \"V_XXXX\" AS\nSELECT \"XGH\", \"NAME\", \"SEX\"\nFROM \"TEST_TABLE\"\nWHERE \"SHENFEN\" = 'student'",
      "postgresql": "CREATE OR REPLACE VIEW \"V_XXXX\" AS\nSELECT \"XGH\", \"NAME\", \"SEX\"\nFROM \"TEST_TABLE\"\nWHERE \"SHENFEN\" = 'student'",
      "sqlserver": "CREATE OR REPLACE VIEW [V_XXXX] AS\nSELECT [XGH], [NAME], [SEX]\nFROM [TEST_TABLE]\nWHERE [SHENFEN] = 'student'",
      "mysql": "CREATE OR REPLACE VIEW `V_XXXX` AS\nSELECT `XGH`, `NAME`, `SEX`\nFROM `TEST_TABLE`\nWHERE `SHENFEN` = 'student'"
    }
  },
  "errmsg": "success"
}

6、[调试使用]指定数据库的DDL类SQL语句转换

URI: http://host:port/sql/debug/special/ddl

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 备注说明
source string 源库类型 源库类型,支持mysql/oralce/sqlserver
target string 目的库类型 标准SQL语句,支持mysql/oralce/sqlserver/posgresql
sql string SQL语句 源库语法的SQL语句

Request Example:

{
    "source":"mysql",
    "target":"oracle",
    "sql":"create table `test_table` (`i` int not null, `j` varchar(5) null)"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
sql string 对应数据库语法的SQL 对应数据库语法的SQL

Response Example:

{
  "errcode": 0,
  "data": {
    "sql": "CREATE TABLE \"test_table\" (\"i\" INTEGER NOT NULL, \"j\" VARCHAR(5))"
  },
  "errmsg": "success"
}

六、异构库表结构转换部分接口

1、获取数据库中所有的模式(model/schema)

URI: http://host:port/database/models_list

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 取值范围
type string 数据库类型 可取值:oracle,mysql,sqlserver2000,sqlserver,postgresql
host string IP地址 数据库主机的IP地址
port integer 端口号 整型的端口号
mode string 连接方式 非必填,但只对Oracle连接有效,可取范围为:sid,servicename,tnsname三种,默认为sid
user string 帐号 登录的帐号名
passwd string 密码 登录的密码
dbname string 库名 连接的数据库名称
charset string 字符集 数据库的字符集

Request Example:

{
    "type":"oracle",
    "host":"172.17.207.252",
    "port":1521,
    "mode":"sid",
    "user":"yi_bo",
    "passwd":"tangyibo",
    "dbname":"orcl",
    "charset":"utf-8"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data list 数据列表 返回的模式列表

Response Example:

{
    "data":[
        "SYS",
        "ODI",
        "TEST"
    ],
    "errcode":0,
    "errmsg":"ok"
}

2、获取数据库中指定模式下的所有表

URI: http://host:port/database/tables_list

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 取值范围
type string 数据库类型 可取值:oracle,mysql,sqlserver2000,sqlserver,postgresql
host string IP地址 数据库主机的IP地址
port integer 端口号 整型的端口号
mode string 连接方式 非必填,但只对Oracle连接有效,可取范围为:sid,servicename,tnsname三种,默认为sid
user string 帐号 登录的帐号名
passwd string 密码 登录的密码
dbname string 库名 连接的数据库名称
model string 模式名 Schema名称
charset string 字符集 数据库的字符集

Request Example:

{
    "type":"oracle",
    "host":"172.17.207.252",
    "port":1521,
    "mode":"sid",
    "user":"yi_bo",
    "passwd":"tangyibo",
    "dbname":"orcl",
    "model":"YI_BO",
    "charset":"utf-8"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data list 数据列表 返回的数据列表
table_name string 表名称 表或视图的英文名称
table_type string 表类型 当表为物理表时标记为table;当表为视图表时标记为view
remarks string 中文描述 源库里的表注释描述,可能为null

Response Example:

{
    "data":[
        {
            "table_type":"table",
            "table_name":"test_world",
            "remarks":"测试表"
        },
        {
            "table_type":"view",
            "table_name":"v_test",
            "remarks":"视图表"
        }
    ],
    "errcode":0,
    "errmsg":"ok"
}

3、获取业务数据库中指定表的元信息

URI: http://host:port/database/table_info

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 取值范围
type string 数据库类型 可取值:oracle,mysql,sqlserver2000,sqlserver,postgresql
host string IP地址 数据库主机的IP地址
port integer 端口号 整型的端口号
mode string 连接方式 非必填,但只对Oracle连接有效,可取范围为:sid,servicename,tnsname三种,默认为sid
user string 帐号 登录的帐号名
passwd string 密码 登录的密码
dbname string 库名 连接的数据库名称
model string 模式名 Schema名称
charset string 字符集 数据库的字符集
src_table string 源表名称 查询的源业务库表名的实际名称

Request Example:

{
    "type":"oracle",
    "host":"172.17.207.252",
    "port":1521,
    "mode":"sid",
    "user":"yi_bo",
    "passwd":"tangyibo",
    "dbname":"orcl",
    "model":"YI_BO",
    "charset":"utf-8",
    "src_table":"C_SEX"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
primary_key list 表的主键列 表的主键字段列表
columns list 表的字段列 表的字段列表
name string 字段列名称 表的字段列表
type string 字段列类型 表的字段列表
nullable integer 是否可为空 取值:true-是;false-否
display_size integer 显示长度 显示长度
precision integer 浮点数的精度 浮点数的精度
scale integer 浮点数的位数 浮点数的位数
class_type string 内部存储类型 内部存储类型
auto_increment bool 是否为自增类型 取值:true-是;false-否, 说明:该字段在MySQL/SqlServer/PostgreSQL有效,在Oracle无效
remarks string 字段注释 源库里的字段的comment描述,可能为null
metadata Object 表元信息 表元信息对象
table_name string 表名称 表或视图的英文名称
table_type string 表类型 当表为物理表时标记为table;当表为视图表时标记为view
remarks string 表注释 metadata下的remarks字段,取值:null、空字符串、普通字符串

Response Example:

{
  "errcode": 0,
  "errmsg": "success",
  "data": {
    "metadata": {
      "table_name": "C_SEX",
      "remarks": "性别测试表",
      "table_type": "TABLE"
    },
    "columns": [
      {
        "class_type": "java.math.BigDecimal",
        "nullable": false,
        "precision": 11,
        "name": "id",
        "display_size": 12,
        "scale": 0,
        "auto_increment": true,
        "type": "NUMBER",
        "remarks": "编号"
      },
      {
        "class_type": "java.lang.String",
        "nullable": true,
        "precision": 255,
        "name": "name",
        "display_size": 255,
        "scale": 0,
        "auto_increment": false,
        "type": "NVARCHAR2",
        "remarks": "名称"
      },
      {
        "class_type": "java.lang.String",
        "nullable": true,
        "precision": 255,
        "name": "value",
        "display_size": 255,
        "scale": 0,
        "auto_increment": false,
        "type": "NVARCHAR2",
        "remarks": "取值"
      }
    ],
    "primary_key": [
      "id"
    ]
  }
}

4、获取业务数据库中指定SQL的元信息

URI: http://host:port/database/sql_info

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 取值范围
type string 数据库类型 可取值:oracle,mysql,sqlserver2000,sqlserver,postgresql
host string IP地址 数据库主机的IP地址
port integer 端口号 整型的端口号
mode string 连接方式 非必填,但只对Oracle连接有效,可取范围为:sid,servicename,tnsname三种,默认为sid
user string 帐号 登录的帐号名
passwd string 密码 登录的密码
model string 模式名 Schema名称
dbname string 库名 连接的数据库名称
charset string 字符集 数据库的字符集
querysql string SQL语句 SELECT查询的SQL语句

Request Example:

{
    "type":"oracle",
    "host":"172.17.207.252",
    "port":1521,
    "mode":"sid",
    "user":"yi_bo",
    "passwd":"tangyibo",
    "dbname":"orcl",
    "charset":"utf-8",
    "querysql":"select * from YI_BO.C_SEX"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
columns list 表的字段列 表的字段列表
name string 字段列名称 表的字段列表
type string 字段列类型 表的字段列表
nullable integer 是否可为空 取值:true-是;false-否
display_size integer 显示长度 显示长度
precision integer 浮点数的精度 浮点数的精度
scale integer 浮点数的位数 浮点数的位数
class_type string 内部存储类型 内部存储类型
auto_increment bool 是否为自增类型 取值:true-是;false-否, 说明:该字段在MySQL/SqlServer/PostgreSQL有效,在Oracle无效
remarks string 中文描述 源库里的字段的comment描述,可能为null

Response Example:

{
  "errcode": 0,
  "errmsg": "success",
  "data": {
    "columns": [
      {
        "class_type": "java.math.BigDecimal",
        "nullable": false,
        "precision": 11,
        "name": "id",
        "display_size": 12,
        "scale": 0,
        "auto_increment": false,
        "type": "NUMBER",
        "remarks": null
      },
      {
        "class_type": "java.lang.String",
        "nullable": true,
        "precision": 255,
        "name": "name",
        "display_size": 255,
        "scale": 0,
        "auto_increment": false,
        "type": "NVARCHAR2",
        "remarks": null
      },
      {
        "class_type": "java.lang.String",
        "nullable": true,
        "precision": 255,
        "name": "value",
        "display_size": 255,
        "scale": 0,
        "auto_increment": false,
        "type": "NVARCHAR2",
        "remarks": null
      }
    ]
  }
}

5、转换业务数据库中指定表为建表SQL语句

URI: http://host:port/database/table_sql

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 取值范围
type string 源数据库类型 可取值:oracle,mysql,sqlserver2000,sqlserver,postgresql
host string IP地址 数据库主机的IP地址
port integer 端口号 整型的端口号
mode string 连接方式 非必填,但只对Oracle连接有效,可取范围为:sid,servicename,tnsname三种,默认为sid
user string 帐号 登录的帐号名
passwd string 密码 登录的密码
charset string 字符集 数据库的字符集
dbname string 库名 连接的数据库名称
src_model string 来源库模式名 来源库Schema名称
src_table string 来源库源表名称 来源库业务库表名的实际名称
target string 目的数据库类型 可取值:oracle,mysql,sqlserver,postgresql,greenplum
dest_model string 目的库模式名 目的库Schema名称
dest_table string 目的库表名称 目的库建表的名称

Request Example:

{
    "type":"oracle",
    "host":"172.17.207.252",
    "port":1521,
    "mode":"sid",
    "user":"yi_bo",
    "passwd":"tangyibo",
    "dbname":"orcl",
    "charset":"utf-8",
    "src_model":"YI_BO",
    "src_table":"C_SEX",
    "target":"mysql",
    "dest_model":"test",
    "dest_table":"test"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
create_sql string 建表的SQL语句 指定数据库语法的建表SQL语句
primary_key list 表的主键列 表的主键字段列表
columns list 表的字段列 表的字段列表
name string 字段列名称 表的字段列表
type string 字段列类型 表的字段列表
nullable integer 是否可为空 取值:true-是;false-否
display_size integer 显示长度 显示长度
precision integer 浮点数的精度 浮点数的精度
scale integer 浮点数的位数 浮点数的位数
class_type string 内部存储类型 内部存储类型
remarks string 字段注释 源库里的字段的comment描述,可能为null
metadata Object 表元信息 表元信息对象
table_name string 表名称 表或视图的英文名称
table_type string 表类型 当表为物理表时标记为table;当表为视图表时标记为view
remarks string 表注释 metadata下的remarks字段,取值:null、空字符串、普通字符串

Response Example:

{
  "errcode": 0,
  "data": {
    "metadata": {
      "table_name": "C_SEX",
      "remarks": "性别测试表",
      "table_type": "TABLE"
    },
    "columns": [
      {
        "class_type": "java.math.BigDecimal",
        "nullable": false,
        "precision": 11,
        "name": "id",
        "display_size": 12,
        "scale": 0,
        "type": "NUMBER",
        "remarks": "编号"
      },
      {
        "class_type": "java.lang.String",
        "nullable": true,
        "precision": 255,
        "name": "name",
        "display_size": 255,
        "scale": 0,
        "type": "NVARCHAR2",
        "remarks": "名称"
      },
      {
        "class_type": "java.lang.String",
        "nullable": true,
        "precision": 255,
        "name": "value",
        "display_size": 255,
        "scale": 0,
        "type": "NVARCHAR2",
        "remarks": "取值"
      }
    ],
    "create_sql": "CREATE TABLE `test`.`test` (\n\t`id` BIGINT NOT NULL,\n\t`name` VARCHAR(255),\n\t`value` VARCHAR(255),\n\tPRIMARY KEY (`id`)\n)",
    "primary_key": [
      "id"
    ]
  },
  "errmsg": "success"
}

6、测试指定数据库中sql有效性

URI: http://host:port/database/sql_test

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 取值范围
type string 数据库类型 可取值:oracle,mysql,sqlserver2000,sqlserver,postgresql
host string IP地址 数据库主机的IP地址
port integer 端口号 整型的端口号
mode string 连接方式 非必填,但只对Oracle连接有效,可取范围为:sid,servicename,tnsname三种,默认为sid
user string 帐号 登录的帐号名
passwd string 密码 登录的密码
dbname string 库名 连接的数据库名称
charset string 字符集 数据库的字符集
querysql string SQL语句 待验证的合法SQL

Request Example:

{
    "type":"oracle",
    "host":"172.17.207.252",
    "port":1521,
    "mode":"sid",
    "user":"yi_bo",
    "passwd":"tangyibo",
    "dbname":"orcl",
    "querysql":"select * from YI_BO.CJB",
    "charset":"utf-8"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息

Response Example:

{
    "errcode":0,            
    "errmsg":"ok"           
}

七、表结构拼接生成部分接口

1、创建表拼接生成SQL语句

URI: http://host:port/generator/create_table

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 取值范围
type string 数据库类型 可取值:oracle,mysql,sqlserver,postgresql,greenplum
schema_name string 模式名称 模式(model/Schema)名称
table_name string 表名称 表名称
column_list list 列信息 数组类型
field_name string 字段英文名称 登录的帐号名
comment string 字段注释 登录的密码
field_type string 数据类型 不同数据库的数据类型存在差异,支持的数据类型请见后面的附录一
length_or_precision integer 显示长度 显示长度
scale integer 存储精度 对于浮点型数据与length_or_precision联合确定存储精度
nullable integer 是否可为空 1-为是;0-为否
primary_key integer 是否为主键 1-为是;0-为否
auto_increment integer 是否为自增 1-为是;0-为否
default_value string 默认值 当nullable为0时配置的默认值,对于时间字段默认值问题见下表

对于时间字段设置当前时间的default_value取值的说明:

数据库 当前时间的设置方法
MySQL数据库 CURRENT_TIMESTAMP
Oracle数据库 SYSDATE
PostgreSQL数据库 (now())
Greenplum数据库 (now())

Request Example:

{
    "type":"mysql",
    "schema_name":"tang",
    "table_name":"test_table",
    "column_list":[
        {
            "field_name":"col1",
            "comment":"列1",
            "field_type":"int",
            "length_or_precision":11,
            "scale":0,
            "nullable":0,
            "primary_key":1,
            "auto_increment":1,
            "default_value":null
        },
        {
            "field_name":"col2",
            "comment":"列2",
            "field_type":"char",
            "length_or_precision":25,
            "scale":0,
            "nullable":0,
            "primary_key":0,
            "auto_increment":0,
            "default_value":"test"
        }
    ]
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
sql string 返回的SQL语句 返回的SQL语句

Response Example:

{
  "errcode": 0,
  "data": {
    "sql": " CREATE TABLE `tang`.`test_table` (\n  `col1` INT (11)  NOT NULL AUTO_INCREMENT COMMENT '列1'\n,`col2` CHAR (25)  DEFAULT 'test' COMMENT '列2'\n, PRIMARY KEY (`col1`)\n )\n"
  },
  "errmsg": "success"
}

Supported Notice

  • 建表参数中的字段注释comment当前只对于MySQL数据库有效,对于Oracle/Greenplum数据库无效;

2、修改表拼接生成SQL语句

URI: http://host:port/generator/alter_table

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 取值范围
type string 数据库类型 可取值:oracle,mysql,sqlserver,postgresql,greenplum
schema_name string 模式名称 模式(model/schema)名称
table_name string 表名称 表名称
operator string 操作类型 取值范围请见下表《operator字段的取值说明》
column_list list 列信息 数组类型
field_name string 字段英文名称 字段英文名称
comment string 字段注释 字段注释
field_type string 数据类型 不同数据库的数据类型存在差异,,支持的数据类型请见后面的附录一
length_or_precision integer 显示长度 显示长度
scale integer 存储精度 对于浮点型数据与length_or_precision联合确定存储精度
nullable integer 是否可为空 1-为是;0-为否
default_value string 默认值 当nullable为0时配置的默认值

operator字段的取值说明

取值 操作 描述 特殊说明
add 添加列 向数据库表中增加一列或多列 对于Oracle、MySQL两类数据库来说支持一次增加多列,对于PostgreSQL、Greenplum类数据库每次只能增加一列
modify 修改列 修改数据库表中的一列 每次只能修改一列的信息,包括列的类型、是否为空、默认值等
drop 删除列 删除数据库表中的一列 每次只能删除一列

Request Example:

{
    "type":"mysql",
    "schema_name":"tang",
    "table_name":"test_table",
    "operator":"add",
    "column_list":[
        {
            "field_name":"col1",
            "comment":"列1",
            "field_type":"int",
            "length_or_precision":11,
            "scale":0,
            "nullable":1,
            "default_value":null
        }
    ]
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
sql string 返回的SQL语句 返回的SQL语句

Response Example:

{
  "errcode": 0,
  "data": {
    "sql": " CREATE TABLE `tang`.`test_table` (\n  `col1` INT (11)  NOT NULL COMMENT '列1'\n,`col2` CHAR (25)  DEFAULT 'test' COMMENT '列2'\n, PRIMARY KEY (`col1`)\n )\n"
  },
  "errmsg": "success"
}

Supported Notice:

  • 该接口不支持主键相关修改,Greenplum不支持主键更换修改,主键为分布式键;
  • 该接口不支持rename操作修改字段名;

3、删除表拼接生成SQL语句

URI: http://host:port/generator/drop_table

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 取值范围
type string 数据库类型 可取值:oracle,mysql,sqlserver,postgresql,greenplum
schema_name string 模式名称 模式(model/Schema)名称
table_name string 表名称 表名称

Request Example:

{
    "type":"mysql",
    "schema_name":"tang",
    "table_name":"test_table"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
sql string 返回的SQL语句 返回的SQL语句

Response Example:

{
  "errcode": 0,
  "data": {
    "sql": "DROP TABLE `public`.`test_table`"
  },
  "errmsg": "success"
}

4、清空表拼接生成SQL语句

URI: http://host:port/generator/truncate_table

Request Method: POST

Request Format: JOSN格式

字段名称 类型 描述 取值范围
type string 数据库类型 可取值:oracle,mysql,sqlserver,postgresql,greenplum
schema_name string 模式名称 模式(model/Schema)名称
table_name string 表名称 表名称

Request Example:

{
    "type":"mysql",
    "schema_name":"tang",
    "table_name":"test_table"
}

Response Format: JOSN格式

字段名称 类型 描述 取值范围
errcode integer 错误码 0为成功,其他为失败
errmsg string 错误信息 当errcode=0时,为"ok",否则为错误的详细信息
data Object 数据对象 返回的数据对象
sql string 返回的SQL语句 返回的SQL语句

Response Example:

{
  "errcode": 0,
  "data": {
    "sql": "TRUNCATE TABLE `public`.`test_table`"
  },
  "errmsg": "success"
}

附录一、支持的三种数据库数据类型明细表

数据库 类型分类 数据类型 定义示例
MySQL 数字 TINYINT TINYINT(2)
MySQL 数字 SMALLINT SMALLINT(2)
MySQL 数字 MEDIUMINT MEDIUMINT(2)
MySQL 数字 INTEGER INTEGER(2)
MySQL 数字 INT INT(2)
MySQL 数字 BIGINT BIGINT(2)
MySQL 数字 FLOAT FLOAT(2)
MySQL 数字 DOUBLE DOUBLE(2)
MySQL 数字 DECIMAL DECIMAL(6,2)
MySQL 时间 DATE DATE
MySQL 时间 TIME TIME
MySQL 时间 YEAR YEAR
MySQL 时间 DATETIME DATETIME
MySQL 时间 TIMESTAMP TIMESTAMP
MySQL 文本 CHAR CHAR(2)
MySQL 文本 VARCHAR VARCHAR(2)
MySQL 文本 TINYBLOB TINYBLOB(2)
MySQL 文本 TINYTEXT TINYTEXT
MySQL 文本 TEXT TEXT
MySQL 文本 MEDIUMTEXT MEDIUMTEXT
MySQL 文本 LONGTEXT LONGTEXT
MySQL 二进制 BLOB BLOB
MySQL 二进制 MEDIUMBLOB MEDIUMBLOB
MySQL 二进制 LONGBLOB LONGBLOB
Oracle 数字 NUMBER NUMBER(38,0)、NUMBER(38,2)
Oracle 时间 DATE DATE
Oracle 时间 TIMESTAMP TIMESTAMP
Oracle 文本 CHAR CHAR(2)
Oracle 文本 NCHAR NCHAR(2)
Oracle 文本 VARCHAR VARCHAR(2)
Oracle 文本 VARCHAR2 VARCHAR2(2)
Oracle 文本 LONG LONG
Oracle 文本 CLOB CLOB
Oracle 二进制 BLOB BLOB
Greenplum 数字 SMALLINT SMALLINT(2)
Greenplum 数字 INT2 INT2
Greenplum 数字 INTEGER INTEGER
Greenplum 数字 INT4 INT4
Greenplum 数字 BIGINT BIGINT
Greenplum 数字 INT8 INT8
Greenplum 数字 DECIMAL DECIMAL(8,2)
Greenplum 数字 NUMERIC NUMERIC(8,2)
Greenplum 数字 REAL REAL(8,2)
Greenplum 数字 DOUBLE DOUBLE
Greenplum (伪)数字 SERIAL SERIAL
Greenplum (伪)数字 BIGSERIAL BIGSERIAL
Greenplum 时间 DATE DATE
Greenplum 时间 TIME TIME
Greenplum 时间 TIMESTAMP TIMESTAMP
Greenplum 文本 CHAR CHAR(2)
Greenplum 文本 VARCHAR VARCHAR(128)
Greenplum 文本 TEXT TEXT
Greenplum 二进制 BYTEA BYTEA
Java
1
https://gitee.com/pxw_admin/dbswitch.git
git@gitee.com:pxw_admin/dbswitch.git
pxw_admin
dbswitch
dbswitch
master

搜索帮助