物化視圖重新整理時報0RA-01400的錯誤

來源:互聯網
上載者:User

物化視圖重新整理時報0RA-01400的錯誤

背景:物化視圖作為資料倉儲重新整理的三把利器之一,實際的工作中更多的是用於異構平台資料的抽取。今天在建立完成一個物化視圖後,手工進行物化視圖重新整理的時候,報出來ORA-12008和ORA-01400的錯誤,錯誤如下:

問題排查:

1、檢查物化視圖的指令碼,以下是引用相關表的指令碼:

SELECT "BillId",

nvl("Status",null) as "Status",

nvl("ChargeEmp",null) as "ChargeEmp",

"ChargeDate"

FROM dbo.TBILLADJ@ewms; //sqlserver資料//

2、尋找相關的SQLSERVER資料庫的表情況

3、檢查表的內容

4、問題原因:顯然由於ChargeEmp限制為非空的,但是可能由於曆史的原因,早期設定的時候是允許空值的。

但是建立物化視圖的時候,如果沒有特殊說明,物化視圖會根據現有表的情況進行相應的限制;

所以當進行重新整理的時候,資料是不符合當前物化視圖的規範的,因此報ORA-01400的錯誤了。

5、解決方案:

這裡引用了Oracle函數:NVL,具體使用介紹如下:

NULL指的是空值,或者非法值。 

NVL (expr1, expr2):expr1為NULL,返回expr2;不為NULL,返回expr1。注意兩者的類型要一致 

NVL2 (expr1, expr2, expr3) :expr1不為NULL,返回expr2;為NULL,返回expr3。expr2和expr3類型不同的話,expr3會轉換為expr2的類型 

NULLIF (expr1, expr2):相等返回NULL,不等返回expr1 

詳細的修改指令碼如下: 

SELECT "BillId", 

 nvl("Status",null) as "Status", 

 nvl("ChargeEmp",null) as "ChargeEmp", 

"ChargeDate" 

 FROM dbo.TBILLADJ@ewms; 

總結:處理問題的過程往往也是學習的過程,且這個學習的速度往往比從書上的學習還快; 

附:手工重新整理物化視圖的指令碼: 

Begin 

    Dbms_mView.Refresh('MV_NAME'); 

End;

物化視圖定義不當引發Oracle效能問題

Oracle物化視圖測試

Oracle【定期重新整理】的【基於串連】的物化視圖

Oracle物化視圖建立報ORA-00942錯誤解決

Oracle 預存程序重新整理物化視圖

Oracle物化視圖的使用

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.