[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[备忘]oracle中表名加双引号引起的table or view does not exist

上一篇:[备忘]修改Oracle10g默认的8080端口
下一篇:[转帖]一字锁基本功练习之我见-------皖宁锁艺 王

添加日期:2014/3/24 16:29:54 快速返回   返回列表 阅读5120次
转的:
----------------------------
oracle建表时有一个严重的问题,在此写出来,提醒大家注意: 

先简单写一下错误内容,如各位已经发现过此问题并已知处理方法,请忽略此邮件内容,以节省时间。 

简单的说就是如在ORACLE建表时的SQL中表名用引号括起来了,则以后对此表的所有操作都必须把此表名用引号括起来,否则报“表不存在”。 

以下为错误详细介绍: 

错误现象:我先用PowerDesigner生成数据库建表脚本,然后在MyEclipse中执行此脚本生成数据库表,执行后,在MyEclipse已经可以看到此表结构。

然后我用select语句查询此表数据,ORACLE提示“ORA-00942 : table or view does not exist ”,表或视图不存在。

但我用MyEclipse生成的SQL来查询此表数据,ORACLE没有报错。 

建表语句简写如下: 
create table "Test01" 

"id" int, 
"name" varchar(20) 
); 

试过的手写select语句如下:select * from Test01; select * from hie.Test01; select * from hie.hieuser.Test01; select * from hie.Test01;(hie是数据库实例名,hieuser是数据库用户名) 

错误分析:MyEclipse自动生成的SQL为:select "id", "name" from "hieuser"."Test01",发现MyEclipse自动生成的SQL把相关标识名用引号包围,看来ORACLE对引号很感冒,

据此在google上查询了oracle和“引号”相关的内容,结果如下: 

oracle建表时,如建表的SQL同时满足以下条件,则不论在查询或新增数据时都必须把相应SQL中的表名用引号括起来,否则会报00942错误。
 
条件1.建表的SQL中表名用引号括起来了。
 
条件2.建表的SQL中表名中英文字符不全部都是大写(即包括一或多个小写英文字符,其他情况我没试过,如表名纯为“123”等情况)。 


解决办法:
强烈建议大家在ORACLE中建表时不要把表名用""括起来,否则把所有涉及到此表的代码中所有表名都加上引号会相当痛苦,在ColdFusion中为了防止和变量声明的引号冲突,可能还要加上转义字符,在JAVA中如果用HIBERNATE来做数据库交互的话,甚至连加引号的途径都没有,只能删除表后重新建表。 

另:我今天在ORACLE 11g中遇到了这个问题,我记得我在两年前也遇到过这个问题,那时我记不清我使用的是哪个ORACLE版本了,反正我感觉ORACLE多个版本中都存在此问题。
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved