解决方案 -SQL脚本建表产生ORA-00942错误

一、问题简介

1、开发环境

      操作系统:win10

      数 据 库:Oracle11g

      数据库连接工具:Navicat  Premium

2、问题简述

       在使用SQL Development、Navicat  Premium、powerdesigner生成SQL脚本 或 使用Navicat  Premium的“数据传输”功能,将旧的数据库复制到Oracle数据库后,再使用select查询语句查询表中记录会出错。

     image

二、问题解决方案

1、原因分析

     Oracle数据库的语法是大小写敏感的,通过SQL语句创建表时,会自动将表名转换成大写。但是如果表名或字段名加上""后,Oracle不会将双引号内的表名变成大写。通过数据库连接工具、数据传输功能生成的SQL语句中的表名生成都带有双引号。

                                    image

       在Oracle数据库执行这种语句后,表名就变成了【表名加双引号】的方式。我们可以通过表名加双引号的方式来查询表。

  1 select * from "emp"

运行结果如下:

         image

2、更改表名和别名

  1 --修改表名
  2 --方法一:ALTER TABLE "emp"  RENAME TO emp;
  3 --方法二:create emp as select * from "emp";
  4 --方法三:使用rename方法,但只能修改当前用户下的表
  5 rename "emp" to emp;
  6 rename "dept" to dept;
  7 rename "SALGRADE" to SALGRADE;
  8 rename "sysdiagrams" to sysdiagrams;
  9 
 10 --修改字段名
 11 alter table dept rename column "deptno" to deptno;
 12 alter table dept rename column "dname" to dname;
 13 alter table dept rename column "loc" to loc;
 14 
 15  --测试程序
 16 select * from emp;
 17 select * from dept;
 18 select * from SALGRADE;
 19 select * from sysdiagrams;
 20 
 21 select * from dept  where deptno = 10

3、Navicat  Premium解决办法

       使用Navicat  Premium进行数据传输,把其他数据库中的数据传输到Oracle数据库时,需要在【高级】选项卡中勾选【转换对象名为大写】才可。

     搜狗截图20180125113829   搜狗截图20180125113803

4、PowerDesigner解决办法

(1)修改Naming Convention配置

    在[Tools->Model Options->Naming Convention]中,把Name和Code的Charcter case属性设成Uppercase(只要不是混合模式即可)。

                        image

(2)修改CaseSensitivityUsingQuote配置

      在【Database->Edit current database->Script->Sql->Format】下将CaseSensitivityUsingQuote的comment为“Determines if the case sensitivity for identifiers is managed using double quotes”,表示是否适用双引号来规定标识符的大小写,可以看到右边的values默认值为“YES”,改为“No”即可!

            image

posted @ 2018-01-24 00:22  苏贺  阅读(3094)  评论(0编辑  收藏  举报