oracle錯誤分析:ora-04063:view view_test has errors


百度了一下,有一個大佬是這樣說的:
在PL/SQL中查詢數據庫視圖時總是報告“ora-04063:view view_test has errors”的錯誤:
Oracle視圖非常強大的功能之一在於其可以創建一個帶有錯誤的視圖。比如說視圖里的字段在基表里不存在,該視圖仍然可以創建成功,但是非法的且無法執行。當基表里加入了該字段,或者說某個字段修改成視圖里的該字段名稱,那么視圖馬上就可以成為合法的。
例子:
  創建基表: create table v_test (name varchar2(32),age number(12));
  創建帶錯誤的視圖:
   create  force view view_test as select name,age,address from v_test;(注意加上force選項)
  由於address字段在v_test里不存在,所以會報warning: View created with compilation errors的警告,而且執行select * from view_test;時會報“ORA-04063: view "SCOTT.VIEW_TEST" 有錯誤”的異常。
但是如果在v_test里加上address字段,那么視圖就會合法。
對基表進行修改:
 alter table v_test add (address varchar2(128));

現在再執行select * from view_test;就會執行成功了。
 
還有一個大佬是這樣解釋的:

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

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

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

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

解決方案: 
所以在刪除視圖時,要非常注意刪除的順序,最后需要用到的數據,最好是從視圖里復制到有物理存儲空間的表中,再逆序刪除所有的臨時視圖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM