1. 程式人生 > >"ORA-00942: 表或檢視不存在 "的原因和解決方法

"ORA-00942: 表或檢視不存在 "的原因和解決方法

採用Oracle資料庫,使用Powerdesigner設計,生成Sql檔案匯入後查詢出現“ORA-00942: 表或檢視不存在 ”,很是鬱悶,這個問題以前出現過,當初解決了,但因好久沒有使用,這次竟然忘了,害得我浪費了好些時間,為了避免再次忘記,將它記下來,同時和大家一起分享。

1、問題產生的原因

  Oracle 是大小寫敏感的,我們創自己寫Sql指令碼建立表的時候Oracle會自動將我們的表名,欄位名轉成大寫,

  eg:

create table T_WindRadar  (
   wr_id                VARCHAR2(64)                    not null
, wr_reciveTime DATE, wr_image BLOB, constraint PK_T_WINDRADAR primary key (wr_id) );

但是 Oracle 同樣支援"" 語法,將表名或欄位名加上""後,Oracle不會將其轉換成大寫
eg:

create table "T_WindRadar"  (
   "wr_id"                VARCHAR2(64)                    not null,
   "wr_reciveTime"        DATE,
   "wr_image "            BLOB,
   
constraint PK_T_WINDRADAR primary key (wr_id) );

如果加上了"",那麼我們採用一般的SQL語句查詢則會產生“ORA-00942: 表或檢視不存在 ”,因此SQL指令碼中需要將表名也加上""。
eg:

select * from  "T_WindRadar";

這種情況在我們手寫SQL的時候一般不會發生,但是我們使用powerdesigner設計資料庫的時候,由於不注意會經常出現此類問題,因為Powerdesigner生成的SQL檔案預設是加""的。

2、解決的辦法

  因為我們使用的是Powerdesigner,所以可以不用手工改寫SQL指令碼,只要設定Powerdesigner重新生成即可。

  在PowerDesiger中,在physical data model 中找到選單中的Database下的Edit current DBMS中,

  選擇Script->Sql->Format,有一項CaseSensitivityUsingQuote,它的comment為“Determines if the case sensitivity for identifiers is managed using double quotes”,

  表示是否適用雙引號來規定識別符號的大小寫,可以看到右邊的values預設值為“YES”,改為“No”,點選【應用】按鈕。

    這樣再生成sql語句時,表和欄位名上是沒有引號了。