赞
踩
由于mysql数据库是从oracle最早的用户下拉取的数据表,后期oracle的用户又对这些数据表进行了变更,没有及时同步所以有很大的出入,所以要将mysql下的所有数据表字段类型与Oracle用户已开发好的数据表字段类型保持一致。
其实有比较简单的方式可以进行核对,目前项目还没上线,数据库表中也没有数据,完全可以重新建库,由于甲方没有给重新建库的权限,所以只能想其他的办法进行核对表和字段类型。如下:
有两种方式,根据自己的需求任选其一
- select a.table_name,a.column_name,a.index_name
- from intormation.schema.statistics a
- group by a.table_schema,a.table_name,a.index_name,a.column_name;
-
- -- 将联合索引字段进行拼接
- select upper(a.table_name),upper(group_concat(column_name order by column_name)) as
- from information_schema.statistics a
- group by a.table_schema,a.table_name ,a.index_name
- order by a.table_name ;
- select t.TABLE_NAME,t.COLUMN_NAME,
- i.index_name,i.UNIQUENESS
- from user_ind_columns t,user_indexes i
- where t.index_name = i.index_name
- and t.table_name = i.table_name
- and table_owner='EWS' -- 用户名
- group by t.table_name,i.index_name,i.UNIQUENESS
- order by t.table_name ;
-
- -- 将联合索引字段进行拼接
- select t.TABLE_NAME,listagg(t.COLUMN_NAME,',') within group(order by t.COLUMN_NAME) as COL,
- i.UNIQUENESS,i.index_name
- from user_ind_columns t,user_indexes i
- where t.index_name = i.index_name
- and t.table_name = i.table_name
- and table_owner='EWS' -- 用户名
- group by t.table_name,i.index_name,i.UNIQUENESS
- order by t.table_name ;
-
- -- 查询oracle数据库下所有的索引
- select t.TABLE_NAME,t.COLUMN_NAME, i.index_type
- from user_ind_columns t, user_indexes i
- where t.index_name = i.index_name
- and t.table_name = i.table_name ;
创建两张临时表用于存放oracle与mysql查询的索引字段,便于查询出oracle存在而mysql不存在的索引
将查询到的所有字段数据导出csv格式,在oracle中导入临时表中
- 1.创建临时表
- create table MYSQL_INDEX(
- table_name VARCHAR2(255),
- col VARCHAR2(255),
- index_type VARCHAR2(255)
- )
-
- create table ORACLE_INDEX(
- table_name VARCHAR2(255),
- col VARCHAR2(255),
- index_type VARCHAR2(255),
- index_name VARCHAR2(255)
- )
- 插入临时表MYSQL_INDEX,ORACLE_INDEX中
- 直接使用以下sql,点击解锁图标,选中需要插入的字段。直接复制粘贴数据,填入需要的空字段中,提交
- select rowid, t.* from MYSQL_INDEX t;
- select rowid, t.* from ORACLE_INDEX t;
- 2.查看oracle存在而mysql不存在的索引
- select t.table_name,t.col,T.index_TYPE,T2.index_TYPE
- FROM oracle_index T
- LEFT JOIN MYSOL_index T2 ON T.table_name = T2.table_name
- WHERE T2.COL IS NULL
- GROUP BY t.table_name,t. col,T. index_TYPE,T2.index_TYPE
- ORDER BY t. table_name;
- select a.col,a.table_name
- from mysql_index a
-
- 3.查询mysql与oracle不一致的索引字段
- select a.col, a.table_name
- from mysql_index a
- where a.col not in
- (
- select a.col as col
- from oracle_index
- left join mysql_index b on a.table_name
- where ь.table_name and a.col b.col
- )
查询两张表的字段是否相等
在查询之前需要将oracle和mysql数据库的字段全部导出
mysql字段需要在notpad++中转换成大写,将数据类型转换成oracle对应的字段类型,方便作比较
- SELECT
- CONCAT_WS('',TABLE_NAME ,COLUMN_NAME )AS COLUMN_NAME,COLUMN_TYPE
- FROM
- information_schema.columns a
- WHERE
- EXISTS( SELECT 1 FROM
- information_schema.tables b
- WHERE b.table_type ='BASE TABLE'
- AND a.table_name = b.table_name AND table_schema ='ews_20')
- ORDER BY a.TABLE_NAME, a.COLUMN_NAME
-
- SELECT table_name||'.'||column_name,
- case when data_type = 'NUMBE'THEN data_type||'('||data_precision||','||DATA_SCLE ||')'
- when data_type = 'DATE' THEN data_type
- ELSE data_type||'('||char_col_decl_length||')' END AS data_typeS
- FROM ALL_TAB_COLUMNS
- WHERE OWNER = UPPER('ews');
- 查询该用户下所有表
- SELECT * FROM ALL_TAB_COLUMNS WHERE OWNER = UPPER('ews');
创建两张临时表用于存放oracle与mysql查询的字段类型,便于查询出oracle存在而mysql不存在的字段类型
将查询到的所有字段数据导出csv格式,在oracle中导入临时表中
- 1.创建临时表
- create table MYSQL_COLUMNS_INFO(
- table_name VARCHAR2(255),
- col VARCHAR2(255)
- )
-
- create table oracle_columns_info(
- table_name VARCHAR2(255),
- col VARCHAR2(255)
- )
- 插入临时表MYSQL_COLUMNS_INFO, oracle_columns_info中
- 直接使用以下sql,点击解锁图标,选中需要插入的字段。直接复制粘贴数据,填入需要的空字段中,提交
- select rowid, t.* from mysql_columns_info t;
- select rowid, t.* from oracle_columns_info t;
- 2.查询出mysql存在而oracle中不存在的字段
- select distinct upper(substr(a.col,1,instr(a.col,'.') -1)) as table_name
- from mysql_columns_info a
- left join oracle_columns_info b
- on upper(substr(a.col,1,instr(a.col,'.') -1)) F upper(substr(b.col,1,instr(b.col,'.') - 1))
- where b.colis null;
- 3.查询mysql与oracle字段类型不一致的字段
- SELECT A.COL,B.T_TYPE as oracle_type,A.T_TYPE as mysql_type
- FROM oracle_columns_info B
- LEFT JOIN MYSQL_COLUMNS_INFO A
- ON A.COL = B.COL AND B.T_TYPE<>A.T_TYPE
- WHERE A.COL Is NOT NULL;
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。