两年前我为一个客户构建了一个报表,它使用一个过夜存储过程来刷新与报表关联的mvs。此报表是基于非常大范围的数据/计算构建的,因此在整个过程中有多个物化视图,以帮助更快地填充数据。因为一个月前只对一个视图做了一个小的代码更改,所以对于物化视图的一夜之间的过程刷新似乎不能正常工作,而且我不确定为什么。
每晚自动运行的存储过程:
create or replace PROCEDURE surge_refresh_procedure
IS
BEGIN
DBMS_MVIEW.REFRESH('SCHEMA.COMBINE1_MV', method => 'C');
DBMS_MVIEW.REFRESH('SCHEMA.SURGE_DET_MV', method => 'C');
DBMS_MVIEW.REFRESH('SCHEMA.SURGE_A0A_MV', method => 'C');
DBMS_MVIEW.REFRESH('SCHEMA.SURGE_REL_MV', method => 'C');
DBMS_MVIEW.REFRESH('SCHEMA.SURGE_MET_MV', method => 'C');
END;
物化视图是一个直接的概念 select * from
它们的关联视图,应该返回相同数量的结果。当我运行语句时 select distinct srt from surge_det_v where srt2_date like '2020%'
,我返回3个结果。当我跑的时候 select distinct srt from surge_det_mv where srt2_date like '2020%'
,我返回6个结果。
另一个小道消息。如果我手动刷新 CALL DBMS_MVIEW.REFRESH('SCHEMA.SURGE_DET_MV', method => 'C');
一旦我第二天早上开始工作 select distinct srt from surge_det_mv where srt2_date like '2020%'
将实际刷新,并返回3个结果。但当存储过程第二天晚上运行时,我们又回到了原点。
存储过程本身没有任何更改。我尝试过重新创建这个程序,但碰巧它会谴责任何“错误”的东西,但仍然一无所获。我也尝试过删除和重新创建有关的mv,但仍然一无所获。
关于为什么存储过程突然不能正确捕获数据有什么想法吗?
暂无答案!
目前还没有任何答案,快来回答吧!