写在最前面
sqlserver向oracle导入数据结构,本文主要使用Navicate,在表结构导入完成的情况下,我们依然需要进行一些简单的处理,才能让程序正常运行。
基本配置及上文
1.sqlserver转oracle(一) oracle创建用户
2.sqlserver转oracle(二) Navicate连接oracle
3.再次声明,本文使用NavicatePremium进行sqlserver2008向oracle的数据结构迁移。
4.你需要预先准备好的东西,在前两篇中都可以找到。比如你需要先配置oracle的用户名密码、需要先建好Navicate中的oracle连接等。
Navicate创建sqlserver连接
很显然也很简单,不多说了吧。
数据结构的导入
1.打开sqlserver连接,及要传入oracle的库,右键,选择”数据传输“
2.在对话框的”常规“中选择sqlserver的库名,模式选"dbo".另一侧选择已经建立的oracle的连接,模式选择设置的用户名。
3.在"高级>其他选项"中选择”遇到错误继续“。
4.点击开始。以上过程如下两张图。
数据结构的处理
在表结构导入完成后,我们已经可以在oracle的连接下看到我们导入的表结构,但如果你进行查询,可能会得到的结果是:"ORA-00942: 表或视图不存在
",比如下图:
原因:
oracle默认是不区分大小写的,所以,你输入的东西如果没有被双引号包裹,oracle会转为大写。但Navicate在导入的时候,会把所有的表,字段都区分大小写导入。这就给我们造成了很大的麻烦,你想每个表名还要加双引号去查么?我是不想。
处理:
就这个问题而言,我们需要对表明、字段名进行修改。但后期我意识到,字段类型也是需要修改的。
修改表名:
在Navicate中执行如下命令:
select 'alter table "'||table_name||'" rename to '||upper(table_name)||';' from user_tables where table_name<>upper(table_name)
将查询出的结果复制到一个新的查询窗口,执行。
这个过程可能会重复多次,因为一旦遇到与系统有冲突的表名,你最好重命名。
修改字段名:
在Navicate中执行如下命令:
select 'alter table '||table_name||' rename column "'|| column_name ||'" to '||upper(column_name)||';' from user_tab_columns where column_name<>upper(column_name);
剩下的和上面类似了,反复执行吧,我在这过程中遇到了很多冲突的命名方式。稍微方便一点的方法是,不要去试图定位那条冲突的语句,直接再次执行查询语句,第一条就会是出错的那一条。