Gre*_*ner 0 sql oracle view ora-00942
我在Oracle视图上执行sql查询时遇到了一个奇怪的行为.该视图包含多个连接.当我键入常规sql时:
select * from vView - I receive the error that view is not found
select * from "vView" - The query is executed.
Run Code Online (Sandbox Code Playgroud)
我想知道为什么?
下面是我的sql:
CREATE OR REPLACE FORCE VIEW "TMSCODE"."vCountEventsData" ("EV_ID_NUMBER", "SI_ID", "EV_YEAR", "EV_INS_DATE", "EV_REM_DATE", "EV_AADT_TOT", "EV_AADT_DIR1", "EV_AADT_DIR2", "EV_REPORT", "DIRECTION", "CNAME", "STATION_DESC") AS
SELECT
"TMSCODE"."STC_EVENTS".EV_ID_NUMBER,
"TMSCODE"."STC_EVENTS".SI_ID,
"TMSCODE"."STC_EVENTS".EV_YEAR,
"TMSCODE"."STC_EVENTS".EV_INS_DATE,
"TMSCODE"."STC_EVENTS".EV_REM_DATE,
"TMSCODE"."STC_EVENTS".EV_AADT_TOT,
"TMSCODE"."STC_EVENTS".EV_AADT_DIR1,
"TMSCODE"."STC_EVENTS".EV_AADT_DIR2,
"TMSCODE"."STC_EVENTS".EV_REPORT,
"TMSCODE"."D_DIRECTION".DIRECTION,
"TMSCODE"."D_CONSULTANT".CNAME,
"TMSCODE"."D_STATION_TYPE".STATION_DESC
FROM
"TMSCODE"."STC_EVENTS"
INNER JOIN "TMSCODE"."D_DIRECTION" ON ("TMSCODE"."STC_EVENTS".EV_DIR = "TMSCODE"."D_DIRECTION".ID)
INNER JOIN "TMSCODE"."D_CONSULTANT" ON ("TMSCODE"."STC_EVENTS".EV_CONS = "TMSCODE"."D_CONSULTANT".ID)
INNER JOIN "TMSCODE"."D_STATION_TYPE" ON ("TMSCODE"."STC_EVENTS".EV_STATION_TYPE = "TMSCODE"."D_STATION_TYPE".ID)
WITH READ ONLY
Run Code Online (Sandbox Code Playgroud)
视图是使用混合大小写名称创建的.如果您发出以下内容(请注意对象名称周围没有引号)
create view karl.vView as (select * from dba_tables);
RDBMS将创建视图,然后您将在dba_views(或者如果您看不到dba_views的user_views)中找到一个名为VVIEW的大写行.然后选择*来自karl.vview或...来自KARL.VVIEW将起作用
但是,如果您引用对象名称保留大小写,则必须再次使用引号将其显式匹配.(这也将允许名称和其他不良场景中的空格.值得知道要避免并且能够在它发生时解决.
SYS@icedev> create table "TesT" (a int);
Table created.
SYS@icedev> insert into TesT values (1);
insert into TesT values (1)
*
ERROR at line 1:
ORA-00942: table or view does not exist
SYS@icedev> insert into test values (1);
insert into test values (1)
*
ERROR at line 1:
ORA-00942: table or view does not exist
SYS@icedev> insert into "TesT" values (1);
1 row created.
当然要删除这个表我不得不使用Drop表"TesT";