Oracle&SQL Server 表名、字段查询

最近工作需求,需求将SQLServer 中的表及数据移转到Oracle数据库

简述一下遇到的问题及解决方案,问题很多,整理一下,后续可能会慢慢更新

1. 时间类型不同,转到Oracle 中后会显示为 TIMESTAMP(6),需改为date 类型

Oracle 
select a.table_name,b.COLUMN_NAME,b.DATA_TYPE  from user_tables a
        left join user_tab_columns b on a.table_name=b.table_name
        where b.DATA_TYPE='TIMESTAMP(6)';
		
SQL Server
select b.name ColumnName,c.name SystemTypeName,a.name tablename,b.precision,b.scale from sys.tables a
left join sys.columns b on a.object_id=b.object_id
left join sys.types  c on b.system_type_id=c.system_type_id
where c.name='date';
alter table EQUBASEINFO modify STARTDATE Date;//默认类型修改

2. 写入数据时,发现默认值为空,

Oracle 
select a1.table_name,a1.COLUMN_NAME,b1.data_default from (
    select a.table_name,b.COLUMN_NAME,b.DATA_TYPE,b.NULLABLE
        --,c.data_default 
        from user_tables a
        left join user_tab_columns b on a.table_name=b.table_name
        -- WHERE a.TABLE_name=''
    ) a1
    right join 
    (select a.table_name,a.COLUMN_NAME,a.data_default from (select * from USER_TAB_COLS where data_default is not null) a) b1
    on a1.table_name=b1.table_name
    where 1=1  -- and a1.TABLE_name='';
alter table EQUBASEINFO modify (STARTDATE default sysadte); //默认值修改
SQL的查询语句没保存下来,有需要的可以自己百度

  

原文地址:https://www.cnblogs.com/aDoc/p/12884213.html