2009-05-11 4 views
0

Oracleビューでsqlクエリを実行しているときに奇妙な動作が発生しました。 ビューには複数の結合が含まれています。私は正規のSQLを入力する:複数の結合を持つOracleビューは、引用符を使用する場合にのみ認識されます。

select * from vView - I receive the error that view is not found 
select * from "vView" - The query is executed. 

私はなぜ思っていますか?ビューが混在ケース名で作成された

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 

答えて

8

以下は私のsqlです。あなたは(オブジェクト名の前後に引用符に注意していない)は、次の

 
create view karl.vView 
as 
(select * from dba_tables); 

を発行するとRDBMSは、ビューを作成し、(あなたがDBA_VIEWSを見ることができない場合やUSER_VIEWS)あなたは、名前とDBA_VIEWSに行を見つけますVVIEW大文字で* karl.vviewから*を選択するか、KARL.VVIEWから...を選択してください。

ただし、オブジェクト名を引用すると大文字と小文字は区別され、引用符で明示的に一致させる必要があります。 (これはまた、名前やその他の悪いシナリオでスペースを許可します。避けるために、それが起こるのないとき解決することができるように知っておく価値がある。もちろん

 
[email protected]> create table "TesT" (a int); 

Table created. 

[email protected]> insert into TesT values (1); 
insert into TesT values (1) 
      * 
ERROR at line 1: 
ORA-00942: table or view does not exist 


[email protected]> insert into test values (1); 
insert into test values (1) 
      * 
ERROR at line 1: 
ORA-00942: table or view does not exist 


[email protected]> insert into "TesT" values (1); 

1 row created. 

を私はドロップテーブルを使用していた、このテーブルを削除する「テスト"

+0

ありがとうKarl、 これはうまくいきました。 。 – Greener

4

オラクルでは、オブジェクトは引用符で囲まれていない限り大文字で表記されています 引用符を使用して大文字と小文字が混在したオブジェクトを作成したため、引用符で囲まれた識別子を使用して、これを大文字に変更してください」

関連する問題