我要查询的数据库是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默认放置双引号。
答案 0 :(得分:3)
也许您用双引号创建了表格? 使用双引号将保留大小写,并且由于表名在示例中同时包含大写和小写字母,因此只有在使用双引号时Oracle才能找到它。
如果没有双引号,Oracle可能会使用单个案例(大写?),无论您在表格中的任何情况如何,默认情况下。
例如: 如果使用
创建表格create table "TaBlE_NaMe" (blah..)
然后你必须在SELECT中使用双引号。
如果使用
创建表格create table TaBlE_NaMe (blah..)
没有引用的SELECT应该可以正常工作。 (如果您将表格的所有字母都用大写字母表示,那么它也适用于引用)
答案 1 :(得分:0)
oracle中的名称是表,列,对象,视图,包,过程,函数等,默认为UPPER CASE,除非引用双引号。此外,oracle中的所有名称解析都区分大小写。
这意味着当您创建或尝试使用数据库对象而不引用名称时,oracle会在创建对象或解析名称之前将该名称隐式转换为大写。因此,不带引号的EvMetadata
表名称等同于引用的upercase "EVMETADATA"
表名,但不等同于引用的混合大小写"EvMetadata"
表名。