小编典典

为什么Oracle 12c查询需要在表周围加双引号

sql

我要查询的数据库是Oracle 12c。有关数据库版本的详细信息如下:

Oracle Database 12c企业版12.1.0.2.0版-64位生产

PL / SQL版本12.1.0.2.0-生产

我试图消除在SQL查询中的每个视图或表周围都使用双引号的需要。

以下作品(从Oracle Sql Developer GUI)

select m."Metadata"
from "EvMetadata" m

以下给出了错误(来自Oracle Sql Developer GUI)

select m.Metadata
from EvMetadata m

错误是

ORA-00942:表或视图不存在00942。00000-“表或视图不存在” 原因:
操作:第2行错误:列:6

我生成了DDL,看起来像这样

CREATE TABLE "EVP"."EvMetadata"

("EvMetadataId" NUMBER(10,0) GENERATED ALWAYS AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE ,

"InsertDate" TIMESTAMP (6),

"SessionId" NVARCHAR2(17),

"FileCheckSum" NVARCHAR2(32), 
"Metadata" NCLOB, 
"Device" NVARCHAR2(20), 
"User" NVARCHAR2(20)
) SEGMENT CREATION IMMEDIATE

因此,基于下面的@toddlermenot注释,很有可能这就是表的创建方式-用双引号引起来。我使用ORM Entity Framework Code
First为我生成了架构,因此ORM似乎默认将双引号引起来。


阅读 366

收藏
2021-05-16

共1个答案

小编典典

也许您用双引号创建了表?使用双引号将保留大小写,并且由于表名在示例中同时具有大写和小写字母,因此,只有在您使用双引号时,Oracle才能找到它。

如果没有双引号,则默认情况下,Oracle可能会使用单个大小写(大写?),而与表中可能存在的任何大小写无关。

例如:如果您使用创建表

create table "TaBlE_NaMe" (blah..)

那么您必须在SELECT中使用双引号。

如果您使用创建表

create table TaBlE_NaMe (blah..)

不带引号的SELECT应该正确工作。(如果您将表格名称的所有字母都大写,则也可以使用引号)

2021-05-16