DBMS_MVIEW パッケージは、マテリアライズドビューを一括でリフレッシュする、名前を指定してリフレッシュする、または指定されたオブジェクトへの依存関係に基づいてリフレッシュするためのストアドプロシージャを提供します。また、指定されたオブジェクトに依存するマテリアライズドビューの一覧を取得するプロシージャも含まれます。
Oracle 互換性に関する注意事項
DBMS_MVIEW は Oracle の DBMS_MVIEW パッケージと互換性があります。ただし、Oracle とのインターフェイス互換性を確保するために存在するパラメーターの多くは、PolarDB for Oracle では効果がなく、単なるプレースホルダーです。これらのパラメーターは、以下のパラメーターテーブルにおいて Oracle専用 と明記されています。Oracle専用パラメーターには任意の値を指定できます。PolarDB はこれらの値を無視します。
サブプログラム
| サブプログラム | 説明 |
|---|---|
| REFRESH_ALL_MVIEWS | すべてのマテリアライズドビューをリフレッシュします。 |
| REFRESH | 1 つ以上の指定されたマテリアライズドビューをリフレッシュします。 |
| 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_seg | Oracle専用。 リフレッシュ中に使用するロールバックセグメント。 |
| refresh_after_errors | Oracle専用。 1 つのマテリアライズドビューのリフレッシュが失敗した場合に、他のマテリアライズドビューのリフレッシュを継続するかどうか。 |
| atomic_refresh | Oracle専用。 すべてのマテリアライズドビューを単一のトランザクション内でリフレッシュするかどうか。 |
| out_of_place | Oracle専用。 アウトオブプレイスリフレッシュを実行するかどうか。 |
例
以下の例では、テーブルおよびマテリアライズドビューを作成し、新しい行を挿入した後、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_seg | Oracle専用。 リフレッシュ中に使用するロールバックセグメント。 |
| push_deferred_rpc | Oracle専用。 マテリアライズドビューの変更内容を関連付けられたプライマリテーブルまたはプライマリマテリアライズドビューにプッシュするかどうか。更新可能なマテリアライズドビューにのみ適用されます。 |
| refresh_after_errors | Oracle専用。 1 つのマテリアライズドビューのリフレッシュが失敗した場合に、他のマテリアライズドビューのリフレッシュを継続するかどうか。 |
| purge_option | Oracle専用。 |
| parallelism | Oracle専用。 |
| heap_size | Oracle専用。 |
| atomic_refresh | Oracle専用。 すべてのマテリアライズドビューを単一のトランザクション内でリフレッシュするかどうか。 |
| nested | Oracle専用。 |
| out_of_place | Oracle専用。 アウトオブプレイスリフレッシュを実行するかどうか。 |
| skip_ext_data | Oracle専用。 |
例
以下の例では、配列オーバーロードを使用して特定のマテリアライズドビューをリフレッシュします。
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_seg | Oracle専用。 リフレッシュ中に使用するロールバックセグメント。 |
| refresh_after_errors | Oracle専用。 1 つのマテリアライズドビューのリフレッシュが失敗した場合に、他のマテリアライズドビューのリフレッシュを継続するかどうか。 |
| atomic_refresh | Oracle専用。 すべてのマテリアライズドビューを単一のトランザクション内でリフレッシュするかどうか。 |
| nested | Oracle専用。 |
| out_of_place | Oracle専用。 アウトオブプレイスリフレッシュを実行するかどうか。 |
例
以下の例では、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;