ORA-00942: 表或视图不存在 "的原因和解决方

今天为工程建库,弄来弄去总是报这个错误。

最后才明白:Oracle表名一定要全部用大写,用小写的话,PL/SQL可能不认。

你说这事郁闷不。

其实最郁闷的在于,这个问题不是因Oracle而起,是PowerDesigner的问题。

在使用PowerDesigner画数据库的图时,如果表名和列名全部使用大写,那么PowerDesigner自动生成的建表语句中就不会使用双引号将表明、列名引起来;但如果名称中包含小写,那么表名或列名中就会包含""。像下面这两个例子:

建表语句A:

create table "t_se_Insurance_Info" (
     VIN                  VARCHAR2(30),
   VMT                  VARCHAR2(20),
   "Drive_Area"         VARCHAR2(10),
   "Is_Ecdemix"         VARCHAR2(1),
   );

建表语句B:

create table T_SE_CITY (
   "City_ID"            NUMBER                          not null,
   "City"               VARCHAR2(20),
   ID                   NUMBER                          not null,
   constraint PK_T_SE_CITY primary key (ID)
);

建表语句A中,表名实际上是t_se_Insurance_Info,但PowerDesigner自动生成的语句中建立的表是"t_se_Insurance_Info";相比表名全大写的建表语句B,这里就多了一对""。由于这对双引号的存在,在PL/SQL中使用语句“select * from t_se_Insurance_Info”就会出现“表或视图不存在”的错误,正确的语句应该是“select * from "t_se_Insurance_Info"”。

字段名与之类似,在PL/SQL中企图检索某字段时,如果字段名全部是大写字母,直接敲字段名即可;如果是大小写混杂,那么需要用""将字段名包起来。

这实际是PowerDesigner的问题。如果我们在将PowerDesigner生成的建表语句执行之前对它进行编辑,去掉其中多余的"",那么一切都将恢复正常。因为Oracle是大小写不敏感的。

转自:http://hi.baidu.com/winters1224/item/953faf0d8a5a1f8a3c42e234

采用Oracle数据库,使用Powerdesigner设计,生成Sql文件导入后查询出现“ORA-00942: 表或视图不存在 ”,很是郁闷,这个问题以前出现过,当初解决了,但因好久没有使用,这次竟然忘了,害得我浪费了好些时间,为了避免再次忘记,将它记下来,同时和大家一起分享。

1、问题产生的原因

  Oracle 是大小写敏感的,我们创自己写Sql脚本创建表的时候Oracle会自动将我们的表名,字段名转成大写,

  eg:

create table T_WindRadar  (
   wr_id                VARCHAR2(64)                    not null,
   wr_reciveTime        DATE,
   wr_image             BLOB,
   constraint PK_T_WINDRADAR primary key (wr_id)
);

 

但是 Oracle 同样支持"" 语法,将表名或字段名加上""后,Oracle不会将其转换成大写
eg:

create table "T_WindRadar"  (
   "wr_id"                VARCHAR2(64)                    not null,
   "wr_reciveTime"        DATE,
   "wr_image "            BLOB,
   constraint PK_T_WINDRADAR primary key (wr_id)
);

如果加上了"",那么我们采用一般的SQL语句查询则会产生“ORA-00942: 表或视图不存在 ”,因此SQL脚本中需要将表名也加上""。
eg:

select * from  "T_WindRadar";

 

这种情况在我们手写SQL的时候一般不会发生,但是我们使用powerdesigner设计数据库的时候,由于不注意会经常出现此类问题,因为Powerdesigner生成的SQL文件默认是加""的。

2、解决的办法

  因为我们使用的是Powerdesigner,所以可以不用手工改写SQL脚本,只要设置Powerdesigner重新生成即可。

  在PowerDesiger中,在physical data model 中找到菜单中的Database下的Edit current DBMS中,

  选择Script->Sql->Format,有一项CaseSensitivityUsingQuote,它的comment为“Determines if the case sensitivity for identifiers is managed using double quotes”,

  表示是否适用双引号来规定标识符的大小写,可以看到右边的values默认值为“YES”,改为“No”,点击【应用】按钮。

    这样再生成sql语句时,表和字段名上是没有引号了。

转自:http://www.cnblogs.com/jtmjx/archive/2012/07/03/2574766.html

我把引号去掉还是出现表或视图不存在的错误,后来发现有个create index生成的有问题,然后我把entity中的除了主键以外的index删除后,就没有错误提示了。

还有一种引号按照上面无法去掉的情况,就是该列名或者表名是oracle的关键字(比如user)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值