首页 文章

为什么Oracle 12c查询需要围绕表重复双引号[重复]

提问于
浏览
0

这个问题在这里已有答案:

我要查询的数据库是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

所以基于@schildmenot在下面的评论,很可能这就是表格的创建方式 - 使用双引号 . 我使用ORM实体框架代码优先为我生成模式,所以看起来ORM默认放置双引号 .

2 回答

  • 2

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

    如果没有双引号,Oracle可能会使用单个案例(上限?),无论您在表中的任何情况如何,默认情况下 .

    例如:如果使用创建表

    create table "TaBlE_NaMe" (blah..)
    

    那么你必须在SELECT中使用双引号 .

    如果使用创建表

    create table TaBlE_NaMe (blah..)
    

    没有引号的SELECT应该可以正常工作 . (如果表格的所有字母都用大写字母表示,那么它也适用于引号)

  • 0

    oracle中的名称是表,列,对象,视图,包,过程,函数等,默认情况下为UPPER CASE,除非引用双引号 . 此外,oracle中的所有名称解析都区分大小写 .

    这意味着当您创建或尝试使用数据库对象而不引用名称时,oracle将在创建对象或解析名称之前将该名称隐式转换为大写 . 因此,未引用的 EvMetadata 表名称等同于引用的upercase "EVMETADATA" 表名称,但不等同于引用的混合大小写 "EvMetadata" 表名称 .

相关问题