用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;

我们可以看到: 

此表在建表的时候,表名和字段名,都被强制加了双引号。

但是,事实上表在创建成功后,只有表名被控制成了小写,字段并不受影响。

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2022-02-15 17:55  Marydon  阅读(2173)  评论(0编辑  收藏  举报