您可以使用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就会包含更新失败的数量。