1. 程式人生 > >Oracle檢視中的錯誤ORA-04063及ORA-04063

Oracle檢視中的錯誤ORA-04063及ORA-04063

(作者:陳玓玏)

一、錯誤ORA-01731: circular view definition encountered

這個錯誤發生的情況是這樣的:我希望每次都拿同一個view去逐個left join一系列的view,每次join完之後把這個view更新為join後的結果,類似序列和那樣的,num=num+1,我也是寫的:

select a.*,b.* from viewA a left join viewB b on a.id=b.bid

這樣寫在Oracle中是不允許的,如果想要一個一個地合併,還是老老實實地建立新的view或者表吧,畢竟沒見過什麼情況是可以在不刪除表的情況下把SQL中的整個表更新的。

二、錯誤ORA-04063:view view_test has errors

這個錯誤發生的原因有兩種情況:

1、一種是建立的檢視本身有誤,但是通過force等命令強制建立成功了,比如檢視本身包含基表中不存在的列(或者是基於不存在的列使用了分析函式創造的列)。

解決方案:
最好不要用強制方法建立檢視,保證所用的列都是真實存在的!

2、檢視的基表,或者檢視基於其建立的檢視被刪除了。Oracle中的檢視可能會先被建立了,然後其基表或者檢視被刪除了,就會導致當前檢視產生錯誤。比如為了避免使用佔空間較多的臨時表,我使用了很多檢視,然後通過檢視來實現複雜的取數,但我在刪除檢視的過程中,是按建立檢視的順序從前往後刪除的。先刪除的最後一個檢視生成時用到過的檢視,這就會導致最後一個生成的檢視是基於不存在的檢視產生的,從而是個錯誤檢視,不能查詢。

解決方案:
所以在刪除檢視時,要非常注意刪除的順序,最後需要用到的資料,最好是從視圖裡複製到有物理儲存空間的表中,再逆序刪除所有的臨時檢視。