Home  >  Article  >  Database  >  物化视图刷新时报0RA-01400的错误

物化视图刷新时报0RA-01400的错误

WBOY
WBOYOriginal
2016-06-07 16:45:211316browse

物化视图作为数据仓库刷新的三把利器之一,实际的工作中更多的是用于异构平台数据的抽

背景:物化视图作为数据仓库刷新的三把利器之一,实际的工作中更多的是用于异构平台数据的抽取。今天在创建完成一个物化视图后,手工进行物化视图刷新的时候,报出来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物化视图的使用

本文永久更新链接地址:

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn