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

Sam*_*evx 0 sql oracle oracle12c

我正在查询的数据库是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
Run Code Online (Sandbox Code Playgroud)

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

select m.Metadata
from EvMetadata m
Run Code Online (Sandbox Code Playgroud)

错误是

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 
Run Code Online (Sandbox Code Playgroud)

因此,根据@toddlermenot 下面的评论,很可能这就是表的创建方式 - 带双引号。我使用 ORM Entity Framework Code First 为我生成架构,所以看起来 ORM 默认情况下使用双引号。

tod*_*not 5

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

默认情况下,如果没有双引号,Oracle 可能会使用单个大小写(大写?),而不管表中可能有任何大小写。

例如:如果您使用以下命令创建表

create table "TaBlE_NaMe" (blah..)
Run Code Online (Sandbox Code Playgroud)

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

如果您使用创建表

create table TaBlE_NaMe (blah..)
Run Code Online (Sandbox Code Playgroud)

不带引号的 SELECT 应该可以正常工作。(如果表名的所有字母都是大写,它也可以与引用一起使用)