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

    我们可以看到: 

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

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

    写在最后

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

     相关推荐:

  • 相关阅读:
    linux安装ftp服务器
    批量删除某个用户所有的表
    解决ORA-14450:试图访问已经在使用的事务处理临时表
    jpa 表字段转bean对象
    oracle查询包含某个字段的表
    给所有的表建同义词
    easyui datagrid
    oracle 拼接一张表所有字段
    easyui js基础
    MySQL的Grant命令
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/15897632.html
Copyright © 2020-2023  润新知