您可以使用DBMS_MVIEW包中的存储过程来管理、更新物化视图及它们的依赖关系。

PolarDB支持下列DBMS_MVIEW存储过程:
表 1. DBMS_MVIEW 存储过程
存储过程 返回类型 说明
GET_MV_DEPENDENCIES(list VARCHAR2, deplist VARCHAR2); N/A 返回指定视图的依赖项列表。
REFRESH(list VARCHAR2, method VARCHAR2, rollback seg VARCHAR2 , push deferred rpc BOOLEAN, refresh after errors BOOLEAN , purge option NUMBER, parallelism NUMBER, heap size NUMBER , atomic refresh BOOLEAN , nested BOOLEAN); N/A 刷新视图名称列表中所有使用逗号分隔的视图。
REFRESH(tab dbms_utility.uncl_array, method VARCHAR2, rollback_seg VARCHAR2, push_deferred_rpc BOOLEAN, refresh_after_errors BOOLEAN, purge_option NUMBER, parallelism NUMBER, heap_size NUMBER, atomic_refresh BOOLEAN, nested BOOLEAN); N/A 刷新所有DBMS_UTILITY.UNCL_ARRAY中的视图。
REFRESH_ALL_MVIEWS(number_of_failures BINARY_INTEGER, method VARCHAR2, rollback_seg VARCHAR2, refresh_after_errors BOOLEAN, atomic_refresh BOOLEAN); N/A 刷新所有物化视图。
REFRESH_DEPENDENT(number_of_failures BINARY_INTEGER, list VARCHAR2, method VARCHAR2, rollback_seg VARCHAR2, refresh_after_errors BOOLEAN, atomic_refresh BOOLEAN, nested BOOLEAN); N/A 刷新所有依赖于以逗号分隔的列表中列出的视图。
REFRESH_DEPENDENT(number_of_failures BINARY_INTEGER, tab dbms_utility.uncl_array, method VARCHAR2, rollback_seg VARCHAR2, refresh_after_errors BOOLEAN, atomic_refresh BOOLEAN, nested BOOLEAN); N/A 刷新所有依赖DBMS_UTILITY.UNCL_ARRAY的视图。

GET_MV_DEPENDENCIES

当命名一个物化视图之后,GET_MV_DEPENDENCIES返回依赖于指定视图的列表项。语法如下:
GET_MV_DEPENDENCIES(
  list IN VARCHAR2, 
  deplist OUT VARCHAR2);
参数
参数名称 描述
list list用于指定物化视图的名称,或物化视图名称中用逗号分隔的列表。
deplist deplist是一个模式限定依赖关系中用逗号分隔的列表。
示例
DECLARE
  deplist VARCHAR2(1000);
BEGIN
  DBMS_MVIEW.GET_MV_DEPENDENCIES('public.emp_view', deplist);
  DBMS_OUTPUT.PUT_LINE('deplist: ' || deplist);
END;
执行结果将返回物化视图public. emp_view上的依赖关系列表。

REFRESH

您可以使用REFRESH存储过程更新在用逗号分隔的视图名称列表中指定的所有视图,或在DBMS_UTILITY. UNCL_ARRAY表中指定的所有视图。
  • 指定逗号分隔的视图名称列表时,语法如下:
    REFRESH(
      list IN VARCHAR2, 
      method IN VARCHAR2 DEFAULT NULL, 
      rollback_seg IN VARCHAR2 DEFAULT NULL, 
      push_deferred_rpc IN BOOLEAN DEFAULT TRUE, 
      refresh_after_errors IN BOOLEAN DEFAULT FALSE, 
      purge_option IN NUMBER DEFAULT 1, 
      parallelism IN NUMBER DEFAULT 0, 
      heap_size IN NUMBER DEFAULT 0, 
      atomic_refresh IN BOOLEAN DEFAULT TRUE, 
      nested IN BOOLEAN DEFAULT FALSE);
  • 指定DBMS_UTILITY. UNCL_ARRAY表中的视图名称时,语法如下:
    REFRESH(
      tab IN OUT DBMS_UTILITY.UNCL_ARRAY, 
      method IN VARCHAR2 DEFAULT NULL, 
      rollback_seg IN VARCHAR2 DEFAULT NULL, 
      push_deferred_rpc IN BOOLEAN DEFAULT TRUE, 
      refresh_after_errors IN BOOLEAN DEFAULT FALSE, 
      purge_option IN NUMBER DEFAULT 1, 
      parallelism IN NUMBER DEFAULT 0, 
      heap_size IN NUMBER DEFAULT 0, 
      atomic_refresh IN BOOLEAN DEFAULT TRUE, 
      nested IN BOOLEAN DEFAULT FALSE);
参数
参数名称 描述
list 用于指定物化视图的名称或逗号分隔的物化视图名称列表。
tab 用于指定物化视图的名称。
method 用于指定应用于指定视图的更新方法。C是唯一支持的更新方法,它能将视图完整地更新。
rollback_seg 为了实现兼容性而支持此参数。默认为NULL 。
push_deferred_rpc 为了实现兼容性而支持此参数。默认为TRUE。
refresh_after_errors 为了实现兼容性而支持此参数。默认为FALSE。
purge_option 为了实现兼容性而支持此参数。默认为1。
parallelism 为了实现兼容性而支持此参数。默认为0。
heap_size 为了实现兼容性而支持此参数。默认为0。
atomic_refresh 为了实现兼容性而支持此参数。默认为TRUE。
nested 为了实现兼容性而支持此参数。默认为FALSE。
示例
EXEC DBMS_MVIEW.REFRESH(list => 'public.emp_view', method => 'C');

REFRESH_ALL_M VIEWS

表或视图的视图关系修改之后,您可以使用REFRESH_ALL_MVIEWS存储过程来更新任何没有被更新的物化视图。语法如下:
REFRESH_ALL_MVIEWS(
  number_of_failures OUT BINARY_INTEGER, 
  method IN VARCHAR2 DEFAULT NULL, 
  rollback_seg IN VARCHAR2 DEFAULT NULL, 
  refresh_after_errors IN BOOLEAN DEFAULT FALSE, 
  atomic_refresh IN BOOLEAN DEFAULT TRUE);
参数
参数名称 描述
number_of_failures 指定在更新操作中更新失败的数量。
method 指定将要应用于指定视图的更新方法。C是唯一支持的更新方法,它能将视图完整地更新。
rollback_seg 为了实现兼容性而支持此参数。默认为NULL。
refresh_after_errors 为了实现兼容性而支持此参数。默认为FALSE。
atomic_refresh 为了实现兼容性而支持此参数。默认为TRUE。
示例
DECLARE
  errors INTEGER;
BEGIN
  DBMS_MVIEW.REFRESH_ALL_MVIEWS(errors, method => 'C');
END;
更新完成后,errors就会包含更新失败的数量。

REFRESH_DEPENDENT

您可以使用REFRESH_DEPENDENT存储过程来更新所有的物化视图。您可以指定一个逗号分隔的列表,或指定DBMS_UTILITY. UNCL_ARRAY表中的视图名称。
  • 指定逗号分隔的视图名称列表时,语法如下:
    REFRESH_DEPENDENT(
      number_of_failures OUT BINARY_INTEGER,
      list IN VARCHAR2,
      method IN VARCHAR2 DEFAULT NULL,
      rollback_seg IN VARCHAR2 DEFAULT NULL
      refresh_after_errors IN BOOLEAN DEFAULT FALSE,
      atomic_refresh IN BOOLEAN DEFAULT TRUE,
      nested IN BOOLEAN DEFAULT FALSE);
  • 指定DBMS_UTILITY. UNCL_ARRAY表中的视图名称时,语法如下:
    REFRESH_DEPENDENT(
      number_of_failures OUT BINARY_INTEGER, 
      tab IN DBMS_UTILITY.UNCL_ARRAY, 
      method IN VARCHAR2 DEFAULT NULL, 
      rollback_seg IN VARCHAR2 DEFAULT NULL,
      refresh_after_errors IN BOOLEAN DEFAULT FALSE, 
      atomic_refresh IN BOOLEAN DEFAULT TRUE, 
      nested IN BOOLEAN DEFAULT FALSE);
参数
参数名称 描述
number_of_failures 指定在更新操作中更新失败的数量。
list 指定物化视图的名称或逗号分隔的物化视图名称列表。
tab 指定物化视图的名称。
method 指定将要应用于指定视图的更新方法。C是唯一支持的更新方法,它能将视图完整地更新。
rollback_seg 为了实现兼容性而支持此参数。默认为NULL。
refresh_after_errors 为了实现兼容性而支持此参数。默认为FALSE。
atomic_refresh 为了实现兼容性而支持此参数。默认为TRUE。
nested 为了实现兼容性而支持此参数。默认为FALSE。
示例
DECLARE
  errors INTEGER;
BEGIN
  DBMS_MVIEW.REFRESH_DEPENDENT(errors, list => 'public.emp_view', method => 'C');
END;
更新完成后,errors就会包含更新失败的数量。