我要查询的数据库是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似乎默认将双引号引起来。
也许您用双引号创建了表?使用双引号将保留大小写,并且由于表名在示例中同时具有大写和小写字母,因此,只有在您使用双引号时,Oracle才能找到它。
如果没有双引号,则默认情况下,Oracle可能会使用单个大小写(大写?),而与表中可能存在的任何大小写无关。
例如:如果您使用创建表
create table "TaBlE_NaMe" (blah..)
那么您必须在SELECT中使用双引号。
如果您使用创建表
create table TaBlE_NaMe (blah..)
不带引号的SELECT应该正确工作。(如果您将表格名称的所有字母都大写,则也可以使用引号)