Oracle 中的注释 同步到Mysql
近期接到了一项工作,就是将Oracle中的数据库注释同步到Mysql。当然这个前提是他们的表结构需要一致。关于这项工作网上有很多的工具。这里主要给大家分享的是如何生成SQL句,这种场景我们经常会使用。
我用的大体思路是:
- 导出Oracle的表结构导出Excel。具体的内容可以查看以前的文章Oracle 查询表、表注释、字段、字段类型及注释
- 将Excel导入到Mysql数据库之中
- 通过查询Mysql表结构以及导入来的新表进行联合查询。生成SQL语句
- 将生成的SQL语句进行执行。
导出表Excel
SELECT
USER_TAB_COMMENTS.TABLE_NAME AS 表名,
USER_TAB_COMMENTS.COMMENTS AS 表注释,
USER_TAB_COLUMNS.COLUMN_NAME AS 字段名称,
USER_COL_COMMENTS.COMMENTS AS 字段注释,
USER_TAB_COLUMNS.DATA_TYPE AS 数据类型,
USER_TAB_COLUMNS.DATA_LENGTH AS 长度,
USER_TAB_COLUMNS.DATA_PRECISION AS 精度,
USER_TAB_COLUMNS.DATA_SCALE AS 小数点后位数,
USER_TAB_COLUMNS.NULLABLE AS 是否允许为空,
USER_TAB_COLUMNS.DEFAULT_LENGTH AS 默认值
FROM USER_TAB_COMMENTS
LEFT JOIN USER_TAB_COLUMNS ON USER_TAB_COLUMNS.TABLE_NAME=USER_TAB_COMMENTS.TABLE_NAME
LEFT JOIN USER_COL_COMMENTS on USER_COL_COMMENTS.TABLE_NAME=USER_TAB_COMMENTS.TABLE_NAME and USER_COL_COMMENTS.COLUMN_NAME=USER_TAB_COLUMNS.COLUMN_NAME
WHERE USER_TAB_COMMENTS.TABLE_NAME in('PISTAFF')
ORDER BY USER_TAB_COMMENTS.TABLE_NAME,USER_TAB_COLUMNS.COLUMN_NAME
将Excel导入Mysql之中

生成SQL语句
下边这块的代码是会根据表信息生成alert table filed的完整语句。平时要做其它的也会用得到
SELECT
concat(
'alter table ',
table_schema, '.', table_name,
' modify column ', column_name, ' ', column_type, ' ',
if(is_nullable = 'YES', ' ', 'not null '),
if(column_default IS NULL, '',
if(
data_type IN ('char', 'varchar')
OR
data_type IN ('date', 'datetime', 'timestamp') AND column_default != 'CURRENT_TIMESTAMP',
concat(' default ''', column_default,''''),
concat(' default ', column_default)
)
),
if(extra is null or extra='','',concat(' ',extra)),
' comment ''', column_comment, ''';'
) s
FROM information_schema.columns
WHERE table_schema = 'col_test' -- col_test 为测试的数据库名称
AND table_name = 'test_columns' -- test_columns 为 测试的表名称
这段是关键您需要结构Mysql的表结构与导入的表信息共同进行查询

执行导入的SQL语句
在这里就不在进行赘述了。简单来说只需要将生成的SQL进行复制并且进行执行。
如果您觉得有用就快收藏吧