oracle 实体化视图中的SYSDATE相对于实体化视图的上次刷新日期的行为如何?

t40tm48m  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(157)

我在Oracle中有一个实体化视图,WHERE子句中有一个SYSDATE条件。

CREATE MATERIALIZED VIEW DISCOUNT_ELIG_CUST ( AS
SELECT customer_id,
       customer_name,
       join_date
FROM MARKET_CUSTOMERS where trunc(join_date) >= trunc(sysdate) - 7 
UNION ALL
SELECT customer_id,
       customer_name,
       join_date
FROM RETAIL_CUSTOMERS where trunc(join_date) >= trunc(sysdate) - 7;

字符串
此MV应获取在过去7天内加入我们的客户的详细信息。
Mv于2023年6月1日在测试环境中进行了最后一次刷新。在2023年7月16日运行此MV,产生2023年5月25日至2023年6月1日的记录。但截至2023年7月16日的预期产量是7月9日至7月16日的记录。
MV中的系统日期是否对基于MV的LRD(上次刷新日期)的查询输出有任何影响?

vojdkbi0

vojdkbi01#

如果我没理解错的话,那么:一个“普通”视图只是一个存储的SELECT语句,不包含任何数据,每次调用它时都会执行。举例来说:

create view v_employees as
select *
from employees
where hiredate > sysdate - 7

字符串
将返回最近7天内雇用的员工。假设人们经常被雇用(* 每天 *),select from v_employees每天都会返回不同的结果集。
与之不同的是,物化视图包含数据。一旦您创建了它,它的内容在下一次刷新之前不会更改。因此,我们认为,

create materialized view mv_employees as
select *
from employees
where hiredate > sysdate - 7


运行“今天”将显示相同的员工 * 永远 * -今天,明天,下个月,...,直到它被刷新-然后它将根据刷新日期(实际上,一个“新的”系统日期)包含过去7天内雇用的员工的数据。

相关问题