用Navicat将mysql导入Oracle后,查询报错:表或视图不存在
1.情景展示
使用Navicat,可以很方便的实现:mysql与Oracle的数据互传;
我将mysql数据库当中的某些表导入Oracle数据库后,导致:
查询导入的表名,被自动加上了双引号;
一旦手动将双引号删除,导入的表将无法查询,报错信息如下:ORA-00942: table or view does not exist
在plsql中也是如此:
2.原因分析
Oracle表和字段是有大小写的区别:
Oracle默认是大写,如果我们用双引号括起来的就区分大小写,如果没有,系统会自动转成大写(即使我们用的是小写)。
当Oracle执行的时候,默认执行的是:select * from META_THEME_COPY1;
由于Oracle区分大小写,所以才查不到此表。
在Oracle中,我们可以用双引号括起来,来区分大小写(也就是,强制Oracle,按照双引号之间内容来执行,不再自动转换成大写)。
因为,Oracle中,表名:meta_theme_copY1,所以,才会报错:此表不存在。
3.解决方案
方式一:在Navicat中手动对表进行重命名;
点击Navicat工具栏上的“表”--》找到要重命名的表,按f2,进行重命名改成大写即可。
方式二:将原来导入的表删除,用Navicat重新导一次。
Navicat的数据传输选项中,可以指定输出是:大写还是小写。
工具--》数据传输;
选择好要传输的两端数据后,点击“选项”;
勾选:转换对象名为小写/大写的选项,选择“大写”;
默认选中的是:小写,所以才会导致上述情况的发生。
4.拓展延伸
我们一起来,看一看:Navicat导入该表时的建表语句到底是个啥?
查看Oracle的建表语句,语法:
select dbms_metadata.get_ddl('TABLE','表名') from dual;
我们可以看到:
此表在建表的时候,表名和字段名,都被强制加了双引号。
但是,事实上表在创建成功后,只有表名被控制成了小写,字段并不受影响。
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/15897632.html