来源网址:http://www.cnblogs.com/yiping06993010/archive/2007/08/02/840220.html
转贴原因:以后会用或者会扩展
?
?
公司有一个系统是基于SqlServer 2k,现在,应客户要求,移植到Oracle 10g数据库。代码的扩展极其easy,三下五除二,搞定。就是在将数据从SqlServer 2k导入到Oracle 10g数据库中时出现了一些问题。刚开始采用的方案是把表结构和数据导入到Sql脚本中,然后在Oracle数据库中执行Sql脚本。这个过程涉及到数据库字段类型的转换问题,容易出错。后来采用使用SqlServer 2k的DTS 将数据从SqlServer中导入到Oracle 10g中。工作就这么搞定了,为了方便以后数据类型的转换,方便以后做针对不同数据库的Sql脚本,我把SqlServer 2k和Oracle 10g大部分数据类型都做了一下测试,当然现在只有SqlServer 2k和Oracle 10g数据对应关系。不对应关系如下:
SqlServer 2k转换为Oracle 10g
|
列名
SqlServer数据类型
SqlServer长度
Oracle数据类型
column1
bigint
8
??? NUMBER(19)
column2
binary
50
??? RAW(50)
column3
bit
1
??? NUMBER(2)
column4
char
10
??? CHAR(10)
column5
datetime
8
??? DATE
column6
decimal
9
??? NUMBER(18)
column7
float
8
?BINARY_DOUBLE
column8
image
16
??? BLOB
column9
int
4
??? NUMBER(10)
column10
money
8
? NUMBER(19,4)
column11
nchar
10
? NCHAR(10)
column12
ntext
16
? NCLOB
column13
numeric
9
?NUMBER(18)
column14
nvarchar
50
?NVARCHAR2(50)
column15
real
4
?BINARY_FLOAT
column16
smalldatetime
4
?DATE
column17
smallint
2
?NUMBER(5)
column18
smallmoney
4
?NUMBER(10,4)
column19
sql_variant
?BLOB
column20
text
16
?CLOB
column21
timestamp
8
?RAW(8)
column22
tinyint
1
?NUMBER(3)
column23
uniqueidentifier
16
?BLOB
column24
varbinary
50
?RAW(50)
column25
varchar
50
?VARCHAR2(50)
Oracle 10g 转换为SqlServer 2k
Oracle列名
Oracle数据类型
SqlServer列名
SqlServer数据类型
SqlServer数据长度
COLUMN1
BINARY_DOUBLE
COLUMN1
float
8
COLUMN2
BINARY_FLOAT
COLUMN2
real
4
COLUMN3
BLOB
COLUMN3
image
16
COLUMN4
CLOB
COLUMN4
ntext
16
COLUMN5
CHAR(10)
COLUMN5
nchar
10
COLUMN6
DATE
COLUMN6
datetime
8
COLUMN12
NUMBER
COLUMN12
numeric
13
COLUMN13
NVARCHAR2(10)
COLUMN13
nvarchar
10
COLUMN14
RAW(10)
COLUMN14
varbinary
10
COLUMN15
TIMESTAMP(6)
COLUMN15
datetime
8
COLUMN16
TIMESTAMP(6) WITH LOCAL TIME ZONE
COLUMN16
datetime
8
COLUMN17
TIMESTAMP(6) WITH TIME ZONE
COLUMN17
datetime
8
COLUMN18
VARCHAR2(10)
COLUMN18
nvarchar
10
COLUMN7
INTERVAL DAY(2) TO SECOND(6)
COLUMN7
nvarchar
30
COLUMN8
INTERVAL YEAR(2) TO MONTH
COLUMN8
nvarchar
14
COLUMN9
LONG
COLUMN9
ntext
16
COLUMN10
LONG RAW
COLUMN10
image
16
COLUMN11
NCLOB
COLUMN11
ntext
16
???? 我们在做数据库移植设计的时候,完全DIY,可以考虑设计可扩展组件完成这种数据库表、列等对应关系的转换工作,那么以后再做系统移植中数据导入时就一劳永逸了。现在也没有时间做这种工作,不过感觉这还是挺有意义的一项工作。??? 在转换过程中,出现了另一个问题,就是如果SqlServer 2k 中的表名含有小写,那么在导入到Oracle 10g后,需要修改表名,否则Sql语句会执行失败。(导入后表名多了引号) 比如SqlServer 2k有一个表test,导入到Oracle 10g后显示的表名仍然为test,但是如果你要查询test表中的数据时,按照正常情况下,你只用输入select * from test即可,可是现在却变成select * from "test"。通过Oracle 10g的维护系统进入修改表名时,表名显示为带有引号的-"test"。出现这个问题,因为表不是很多,所以我们将SqlServer 2k的表名都改为了大写,或者在Oracle中将表名改为大写,就ok了,需要注意这些细节。Oracle 10g导入到SqlServer 2k中没有出现问题。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!