下午從生產庫導出了一份表結構,用來測試一些問題,由於生產庫連接着其他用戶下的表所以通過視圖在本地模擬一下,於是創建視圖:
create or replace view csews as select * from order_list;
但是出現ORA-00955: name is already used by an existing object的錯誤,
上網查了下說是數據庫中有了同名對象,於是查詢
select * from all_objects where object_name='csews';
但是沒有任何記錄,很是抓狂,找了好久也沒有找到解決辦法,最后就在表結構文件中搜索
csews 居然搜索到了這樣一條語句:
create or replace synonym CSEWS for P3DBO.CSEWS;
我恍然大悟了,原來創建了同義詞。
於是就刪除了同義詞:
drop public synonym CSEWS;
然后重新執行:
create or replace view csews as select * from order_list;
視圖就成功建立了。
但是仔細一想,select * from all_objects where object_name='csews';
這條語句應該可以查出來呀,因為我另一個用戶下也有這個視圖但是為什么沒有查出來呢,於是有把csews 換成大寫試了下即查詢:
select * from all_objects where object_name='CSEWS';
結果就查詢出來了,這時才明白原來要大寫。如果早知道就不會浪費那么多時間了,但是誰讓咱是菜鳥水平,特此記錄一下,
避免自己下次再犯類似錯誤!
注:經過Oracle的詞法分析,本身就會將小寫轉成大寫,直接大寫減少了編譯過程的時間,所以大寫是一個好習慣!