Để bắt đầu, từ Hướng dẫn Kho dữ liệu Cơ sở dữ liệu Oracle:
Hạn chế đối với việc làm mới nhanh trên các chế độ xem được vật chất hóa chỉ với tham gia
...
- Rowid của tất cả các bảng trong danh sách FROM phải xuất hiện trong danh sách CHỌN của truy vấn.
Điều này có nghĩa là tuyên bố của bạn sẽ cần phải trông giống như sau:
CREATE MATERIALIZED VIEW MV_Test
NOLOGGING
CACHE
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS
SELECT V.*, P.*, V.ROWID as V_ROWID, P.ROWID as P_ROWID
FROM TPM_PROJECTVERSION V,
TPM_PROJECT P
WHERE P.PROJECTID = V.PROJECTID
Một khía cạnh quan trọng khác cần lưu ý là nhật ký chế độ xem cụ thể hóa của bạn phải được tạo dưới dạng with rowid
.
Dưới đây là một kịch bản kiểm tra chức năng:
CREATE TABLE foo(foo NUMBER, CONSTRAINT foo_pk PRIMARY KEY(foo));
CREATE MATERIALIZED VIEW LOG ON foo WITH ROWID;
CREATE TABLE bar(foo NUMBER, bar NUMBER, CONSTRAINT bar_pk PRIMARY KEY(foo, bar));
CREATE MATERIALIZED VIEW LOG ON bar WITH ROWID;
CREATE MATERIALIZED VIEW foo_bar
NOLOGGING
CACHE
BUILD IMMEDIATE
REFRESH FAST ON COMMIT AS SELECT foo.foo,
bar.bar,
foo.ROWID AS foo_rowid,
bar.ROWID AS bar_rowid
FROM foo, bar
WHERE foo.foo = bar.foo;