解决方案 -SQL脚本建表产生ORA-00942错误
一、问题简介
1、开发环境
操作系统:win10
数 据 库:Oracle11g
数据库连接工具:Navicat Premium
2、问题简述
在使用SQL Development、Navicat Premium、powerdesigner生成SQL脚本 或 使用Navicat Premium的“数据传输”功能,将旧的数据库复制到Oracle数据库后,再使用select查询语句查询表中记录会出错。
二、问题解决方案
1、原因分析
Oracle数据库的语法是大小写敏感的,通过SQL语句创建表时,会自动将表名转换成大写。但是如果表名或字段名加上""后,Oracle不会将双引号内的表名变成大写。通过数据库连接工具、数据传输功能生成的SQL语句中的表名生成都带有双引号。
在Oracle数据库执行这种语句后,表名就变成了【表名加双引号】的方式。我们可以通过表名加双引号的方式来查询表。
1 select * from "emp"
运行结果如下:
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数据库时,需要在【高级】选项卡中勾选【转换对象名为大写】才可。
4、PowerDesigner解决办法
(1)修改Naming Convention配置
在[Tools->Model Options->Naming Convention]中,把Name和Code的Charcter case属性设成Uppercase(只要不是混合模式即可)。
(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”即可!