DBMS_MVIEW 包提供了一个可以一次性刷新多个物化视图的方法。
33.1 相关方法
- REFRESH
刷新物化视图。
语法如下:
PROCEDURE REFRESH(
LST IN VARCHAR,
METHOD IN VARCHAR DEFAULT NULL,
ROLLBACK_SEG IN VARCHAR DEFAULT NULL,
PUSH_DEFERRED_RPC IN BOOL DEFAULT TRUE,
REFRESH_AFTER_ERRORS IN BOOL DEFAULT FALSE,
PURGE_OPTION IN BINARY_INTEGER DEFAULT 1,
PARALLELISM IN BINARY_INTEGER DEFAULT 0,
HEAP_SIZE IN BINARY_INTEGER DEFAULT 0,
ATOMIC_REFRESH IN BOOL DEFAULT TRUE,
NESTED IN BOOL DEFAULT FALSE
);
参数详解
-
LST
指定的要刷新的物化视图名称,多个物化视图则用逗号隔开。
-
METHOD
对应 LST 中的物化视图的刷新方式,'f'表示快速刷新,'c'表示完全刷新,空串表示默认刷新方式。另外,'a'和'C'等价,'p'和空串等价。标记不区分大小写。
-
atomic_refresh
指明 lst 中的所有物化视图如果有失败的话,是提交已成功刷新的记录还是全部不提交。true 表示全部不提交,FAlSE 表示提交已成功刷新的记录。缺省为 true。
-
rollback_seg/push_deferred_rpc/refresh_fater_errors/purge/option/parallelism/heap_size/nested 仅语法支持。
33.2 举例说明
使用包内的过程和函数之前,如果还未创建过 DBMS_MVIEW 包,请先调用系统过程创建 DBMS_MVIEW 包。
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_MVIEW');
数据准备
//创建模式和表
CREATE SCHEMA PURCHASING1 AUTHORIZATION SYSDBA;
CREATE TABLE PURCHASING1.VENDOR
(VENDORID INT IDENTITY(1,1) PRIMARY KEY,
ACCOUNTNO VARCHAR(15) NOT NULL,
NAME VARCHAR(50) NOT NULL,
ACTIVEFLAG BIT NOT NULL,
WEBURL VARCHAR(1024),
CREDIT INT NOT NULL CHECK(CREDIT IN(1,2,3,4,5)));
//创建物化视图日志
CREATE MATERIALIZED VIEW LOG ON PURCHASING1.VENDOR WITH ROWID(VENDORID,ACCOUNTNO,NAME,ACTIVEFLAG,WEBURL,CREDIT) PURGE START WITH SYSDATE REPEAT INTERVAL '1' DAY;
//创建物化视图PURCHASING1.MV_VENDOR_EXCELLENT1
CREATE MATERIALIZED VIEW PURCHASING1.MV_VENDOR_EXCELLENT1
REFRESH WITH ROWID START WITH SYSDATE+1 NEXT SYSDATE + 2 AS
SELECT ROWID A, VENDORID, ACCOUNTNO, NAME, ACTIVEFLAG, CREDIT
FROM PURCHASING1.VENDOR
WHERE CREDIT = 1;
//创建物化视图SYSDBA.MV_VENDOR_EXCELLENT2
CREATE MATERIALIZED VIEW SYSDBA.MV_VENDOR_EXCELLENT2
REFRESH WITH ROWID START WITH SYSDATE+1 NEXT SYSDATE + 2 AS
SELECT ROWID A, VENDORID, ACCOUNTNO, NAME, ACTIVEFLAG, CREDIT
FROM PURCHASING1.VENDOR
WHERE CREDIT = 1;
一次性刷新模式 PURCHASING1 模式 MV_VENDOR_EXCELLENT1 物化视图和 sysdba 模式 MV_VENDOR_EXCELLENT2 物化视图,前者使用快速刷新,后者使用完全刷新。
CALL DBMS_MVIEW.REFRESH('PURCHASING1.MV_VENDOR_EXCELLENT1,
sysdba.MV_VENDOR_EXCELLENT2', 'FC');