すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DBMS_MVIEW

最終更新日:Mar 28, 2026

DBMS_MVIEW パッケージは、マテリアライズドビューを一括でリフレッシュする、名前を指定してリフレッシュする、または指定されたオブジェクトへの依存関係に基づいてリフレッシュするためのストアドプロシージャを提供します。また、指定されたオブジェクトに依存するマテリアライズドビューの一覧を取得するプロシージャも含まれます。

Oracle 互換性に関する注意事項

DBMS_MVIEW は Oracle の DBMS_MVIEW パッケージと互換性があります。ただし、Oracle とのインターフェイス互換性を確保するために存在するパラメーターの多くは、PolarDB for Oracle では効果がなく、単なるプレースホルダーです。これらのパラメーターは、以下のパラメーターテーブルにおいて Oracle専用 と明記されています。Oracle専用パラメーターには任意の値を指定できます。PolarDB はこれらの値を無視します。

サブプログラム

サブプログラム説明
REFRESH_ALL_MVIEWSすべてのマテリアライズドビューをリフレッシュします。
REFRESH1 つ以上の指定されたマテリアライズドビューをリフレッシュします。
REFRESH_DEPENDENT指定されたオブジェクトに依存するすべてのマテリアライズドビューをリフレッシュします。
GET_MV_DEPENDENT指定されたオブジェクトに依存するすべてのマテリアライズドビューを一覧表示します。

REFRESH_ALL_MVIEWS

現在のデータベース内のすべてのマテリアライズドビューをリフレッシュします。

構文

PROCEDURE REFRESH_ALL_MVIEWS (
    number_of_failures     OUT   BINARY_INTEGER,
    method                 IN    VARCHAR2         := NULL,
    rollback_seg           IN    VARCHAR2         := NULL,
    refresh_after_errors   IN    BOOLEAN          := FALSE,
    atomic_refresh         IN    BOOLEAN          := TRUE,
    out_of_place           IN    BOOLEAN          := FALSE);

パラメーター

パラメーター説明
number_of_failures(OUT) リフレッシュに失敗したマテリアライズドビューの数。
method(省略可能) リフレッシュ方式。有効な値: C または c(完全リフレッシュ)、A または a(常にリフレッシュ)。完全リフレッシュと常にリフレッシュは同等です。デフォルト値は NULL です。
rollback_segOracle専用。 リフレッシュ中に使用するロールバックセグメント。
refresh_after_errorsOracle専用。 1 つのマテリアライズドビューのリフレッシュが失敗した場合に、他のマテリアライズドビューのリフレッシュを継続するかどうか。
atomic_refreshOracle専用。 すべてのマテリアライズドビューを単一のトランザクション内でリフレッシュするかどうか。
out_of_placeOracle専用。 アウトオブプレイスリフレッシュを実行するかどうか。

例

以下の例では、テーブルおよびマテリアライズドビューを作成し、新しい行を挿入した後、REFRESH_ALL_MVIEWS を呼び出してビューを同期します。

CREATE TABLE test(a int, b int);

INSERT INTO test VALUES (1, 2);
CREATE MATERIALIZED VIEW mv0 AS SELECT a, b FROM test;

INSERT INTO test VALUES (2, 3);

-- リフレッシュ前: ビューには元の行のみが表示される
SELECT * FROM mv0 ORDER BY 1, 2;
 a | b
---+---
 1 | 2
(1 row)

DECLARE
    la DBMS_UTILITY.UNCL_ARRAY;
BEGIN
    la := DBMS_UTILITY.UNCL_ARRAY('mv0');
    DBMS_MVIEW.REFRESH(tab => la,
                       method => 'A',
                       rollback_seg => NULL,
                       push_deferred_rpc => true,
                       refresh_after_errors => false,
                       purge_option => 1,
                       nested => false,
                       out_of_place => true,
                       skip_ext_data => true);
END;

-- リフレッシュ後: ビューには新しい行が含まれる
SELECT * FROM mv0 ORDER BY 1, 2;
 a | b
---+---
 1 | 2
 2 | 3
(2 rows)

REFRESH

1 つ以上の指定されたマテリアライズドビューをリフレッシュします。2 種類のオーバーロードが利用可能です。1 つ目は、ビュー名をカンマ区切りの文字列として受け取り、2 つ目は DBMS_UTILITY.UNCL_ARRAY を受け取ります。

構文

-- オーバーロード 1:ビュー名をカンマ区切りの文字列として渡す
PROCEDURE REFRESH (
    list                   IN     VARCHAR2,
    method                 IN     VARCHAR2       := NULL,
    rollback_seg           IN     VARCHAR2       := NULL,
    push_deferred_rpc      IN     BOOLEAN        := true,
    refresh_after_errors   IN     BOOLEAN        := false,
    purge_option           IN     BINARY_INTEGER := 1,
    parallelism            IN     BINARY_INTEGER := 0,
    heap_size              IN     BINARY_INTEGER := 0,
    atomic_refresh         IN     BOOLEAN        := true,
    nested                 IN     BOOLEAN        := false,
    out_of_place           IN     BOOLEAN        := false,
    skip_ext_data          IN     BOOLEAN        := false);

-- オーバーロード 2:ビュー名を配列として渡す
PROCEDURE REFRESH (
    tab                    IN     DBMS_UTILITY.UNCL_ARRAY,
    method                 IN     VARCHAR2       := NULL,
    rollback_seg           IN     VARCHAR2       := NULL,
    push_deferred_rpc      IN     BOOLEAN        := true,
    refresh_after_errors   IN     BOOLEAN        := false,
    purge_option           IN     BINARY_INTEGER := 1,
    parallelism            IN     BINARY_INTEGER := 0,
    heap_size              IN     BINARY_INTEGER := 0,
    atomic_refresh         IN     BOOLEAN        := true,
    nested                 IN     BOOLEAN        := false,
    out_of_place           IN     BOOLEAN        := false,
    skip_ext_data          IN     BOOLEAN        := false);

パラメーター

パラメーター説明
listリフレッシュ対象のマテリアライズドビュー名をカンマ区切りの文字列で指定します。このパラメーターはオーバーロード 1 で使用します。
tabリフレッシュ対象のマテリアライズドビュー名を DBMS_UTILITY.UNCL_ARRAY で指定します。このパラメーターはオーバーロード 2 で使用します。
method(省略可能) リフレッシュ方式。有効な値: C または c(完全リフレッシュ)、A または a(常にリフレッシュ)。完全リフレッシュと常にリフレッシュは同等です。デフォルト値は NULL です。
rollback_segOracle専用。 リフレッシュ中に使用するロールバックセグメント。
push_deferred_rpcOracle専用。 マテリアライズドビューの変更内容を関連付けられたプライマリテーブルまたはプライマリマテリアライズドビューにプッシュするかどうか。更新可能なマテリアライズドビューにのみ適用されます。
refresh_after_errorsOracle専用。 1 つのマテリアライズドビューのリフレッシュが失敗した場合に、他のマテリアライズドビューのリフレッシュを継続するかどうか。
purge_optionOracle専用。
parallelismOracle専用。
heap_sizeOracle専用。
atomic_refreshOracle専用。 すべてのマテリアライズドビューを単一のトランザクション内でリフレッシュするかどうか。
nestedOracle専用。
out_of_placeOracle専用。 アウトオブプレイスリフレッシュを実行するかどうか。
skip_ext_dataOracle専用。

例

以下の例では、配列オーバーロードを使用して特定のマテリアライズドビューをリフレッシュします。

CREATE TABLE test(a int, b int);

INSERT INTO test VALUES (1, 2);
CREATE MATERIALIZED VIEW mv0 AS SELECT a, b FROM test;

INSERT INTO test VALUES (2, 3);

-- リフレッシュ前:ビューには元の行のみ表示されます
SELECT * FROM mv0 ORDER BY 1, 2;
 a | b
---+---
 1 | 2
(1 行)

DECLARE
    la DBMS_UTILITY.UNCL_ARRAY;
BEGIN
    la := DBMS_UTILITY.UNCL_ARRAY('mv0');
    DBMS_MVIEW.REFRESH(tab => la,
                       method => 'A',
                       rollback_seg => NULL,
                       push_deferred_rpc => true,
                       refresh_after_errors => false,
                       purge_option => 1,
                       nested => false,
                       out_of_place => true,
                       skip_ext_data => true);
END;

-- リフレッシュ後:ビューには新しい行も含まれます
SELECT * FROM mv0 ORDER BY 1, 2;
 a | b
---+---
 1 | 2
 2 | 3
(2 行)

REFRESH_DEPENDENT

指定されたオブジェクトに依存するすべてのマテリアライズドビューをリフレッシュします。2 種類のオーバーロードが利用可能です。1 つ目は、オブジェクト名をカンマ区切りの文字列として受け取り、2 つ目は DBMS_UTILITY.UNCL_ARRAY を受け取ります。

構文

-- オーバーロード 1:オブジェクト名をカンマ区切りの文字列として渡す
PROCEDURE REFRESH_DEPENDENT (
    number_of_failures     OUT    BINARY_INTEGER,
    list                   IN     VARCHAR2,
    method                 IN     VARCHAR2    := NULL,
    rollback_seg           IN     VARCHAR2    := NULL,
    refresh_after_errors   IN     BOOLEAN     := false,
    atomic_refresh         IN     BOOLEAN     := true,
    nested                 IN     BOOLEAN     := false,
    out_of_place           IN     BOOLEAN     := false);

-- オーバーロード 2:オブジェクト名を配列として渡す
PROCEDURE REFRESH_DEPENDENT (
    number_of_failures     OUT    BINARY_INTEGER,
    tab                    IN     DBMS_UTILITY.UNCL_ARRAY,
    method                 IN     VARCHAR2    := NULL,
    rollback_seg           IN     VARCHAR2    := NULL,
    refresh_after_errors   IN     BOOLEAN     := false,
    atomic_refresh         IN     BOOLEAN     := true,
    nested                 IN     BOOLEAN     := false,
    out_of_place           IN     BOOLEAN     := false);

パラメーター

パラメーター説明
number_of_failures(OUT) リフレッシュに失敗したマテリアライズドビューの数。
list依存関係を持つマテリアライズドビューをリフレッシュする対象のオブジェクト名を、カンマ区切りの文字列で指定します。このパラメーターはオーバーロード 1 で使用します。
tab依存関係を持つマテリアライズドビューをリフレッシュする対象のオブジェクト名を、DBMS_UTILITY.UNCL_ARRAY で指定します。このパラメーターはオーバーロード 2 で使用します。
method(省略可能) リフレッシュ方式。有効な値: C または c(完全リフレッシュ)、A または a(常にリフレッシュ)。完全リフレッシュと常にリフレッシュは同等です。デフォルト値は NULL です。
rollback_segOracle専用。 リフレッシュ中に使用するロールバックセグメント。
refresh_after_errorsOracle専用。 1 つのマテリアライズドビューのリフレッシュが失敗した場合に、他のマテリアライズドビューのリフレッシュを継続するかどうか。
atomic_refreshOracle専用。 すべてのマテリアライズドビューを単一のトランザクション内でリフレッシュするかどうか。
nestedOracle専用。
out_of_placeOracle専用。 アウトオブプレイスリフレッシュを実行するかどうか。

例

以下の例では、DBMS_UTILITY.COMMA_TO_TABLE を使用してテーブル名を配列に変換し、そのテーブルに依存するすべてのマテリアライズドビューをリフレッシュします。

CREATE TABLE test(a int, b int);

INSERT INTO test VALUES (1, 2);
CREATE MATERIALIZED VIEW mv0 AS SELECT a, b FROM test;

INSERT INTO test VALUES (2, 3);

-- リフレッシュ前:ビューには元の行のみ表示されます
SELECT * FROM mv0 ORDER BY 1, 2;
 a | b
---+---
 1 | 2
(1 行)

DECLARE
    la  DBMS_UTILITY.UNCL_ARRAY;
    len INTEGER;
    nof BINARY_INTEGER;
BEGIN
    DBMS_UTILITY.COMMA_TO_TABLE('test', len, la);
    DBMS_MVIEW.REFRESH_DEPENDENT(number_of_failures => nof,
                                 tab => la,
                                 method => 'A',
                                 rollback_seg => NULL,
                                 refresh_after_errors => true,
                                 atomic_refresh => false,
                                 nested => false,
                                 out_of_place => true);
    -- リフレッシュ失敗数:0
    DBMS_OUTPUT.PUT_LINE('The num of refresh failures is:' || nof);
END;

-- リフレッシュ後:ビューには新しい行も含まれます
SELECT * FROM mv0 ORDER BY 1, 2;
 a | b
---+---
 1 | 2
 2 | 3
(2 行)

GET_MV_DEPENDENT

指定されたオブジェクトに依存するすべてのマテリアライズドビューを一覧表示します。

構文

PROCEDURE GET_MV_DEPENDENCIES (
    mvlist  IN   VARCHAR2,
    deplist OUT  VARCHAR2);

パラメーター

パラメーター説明
mvlist依存関係を持つマテリアライズドビューを確認する対象のオブジェクト名。
deplist(OUT) 指定されたオブジェクトに依存するマテリアライズドビューのカンマ区切りリスト。

例

以下の例では、同一のベーステーブル上に 2 つのマテリアライズドビューを作成し、GET_MV_DEPENDENCIES を呼び出してそれらを一覧表示します。

CREATE TABLE test(a int, b int);

CREATE MATERIALIZED VIEW mv0 AS SELECT a, b FROM test;
CREATE MATERIALIZED VIEW mv1 AS SELECT a, b FROM test;

DECLARE
    deplist VARCHAR2;
BEGIN
    DBMS_MVIEW.GET_MV_DEPENDENCIES('test', deplist);
    -- 依存関係: "PUBLIC"."MV0", "PUBLIC"."MV1"
    DBMS_OUTPUT.PUT_LINE('The dependencies are: ' || deplist);
END;