Trên Oracle 11g, tôi đang cố gắng tạo một chế độ xem vật hoá với FAST REFRESH ON COMMIT
có mệnh đề là HAVING
.Chế độ xem được làm mới nhanh với mệnh đề HAVING?
Các Database Data Warehousing Guide nói:
General Restrictions on Fast Refresh
The defining query of the materialized view is restricted as follows:
- It cannot contain a HAVING clause with a subquery.
Nhưng nếu tôi thêm HAVING count(*)>1
(lưu ý: không subquery) đến một cách khác làm việc cụ thể hóa quan điểm, tôi nhận được lỗi này:
ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view
dbms_mview.explain_mview()
nói:
REFRESH_FAST N
REFRESH_FAST_AFTER_INSERT N 2011 a HAVING clause is present
Lệnh thực tế:
SQL> create materialized view mv1 refresh fast on commit as
2 select UserId, count(*) from USERS group by UserId;
Materialized view created.
SQL> DROP MATERIALIZED VIEW mv1;
Materialized view dropped.
SQL> create materialized view mv1 refresh fast on commit as
2 select UserId, count(*) from USERS group by UserId
3 having count(*)>1; -- the only difference
having count(*)>1
*
ERROR at line 5:
ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view
Lưu ý: Nhật ký xem vật liệu được tạo (thậm chí không phải ví dụ đầu tiên sẽ hoạt động).
Tại sao nó không hoạt động? Có ai biết một ví dụ MV với một mệnh đề HAVING? Vì vậy, ít nhất tôi có thể bắt đầu từ đó (tôi googled nhưng tôi không tìm thấy).
Lưu ý2: Lý do tôi muốn HAVING
là giảm số lượng hàng trong chế độ xem từ hàng nghìn hoặc thậm chí là triệu thành chỉ một vài. Để lưu trữ (và có thể đạt được hiệu suất).
PS: Phiên bản cơ sở dữ liệu Oracle chính xác được sử dụng: 11.2.0.3.0
@GordonLinoff - chức năng được ghi lại không hoạt động với mệnh đề HAVING ** với truy vấn phụ **. Câu hỏi có ý nghĩa hoàn hảo - OP * tuyên bố rằng anh không có truy vấn phụ trong định nghĩa MV của mình. Cho dù anh ta có hay không là một câu hỏi khác - anh ấy đã đăng một cái gì đó khác với định nghĩa MV thực tế của mình - nhưng câu hỏi có ý nghĩa hoàn hảo. – mathguy
@mathguy Các ví dụ trong câu hỏi tạo lại vấn đề và chúng không có truy vấn phụ. Tôi sẽ xóa đề cập đến truy vấn "khác" được đề cập để tránh nhầm lẫn. (mặc dù sau đó ai đó sẽ nói ví dụ đơn giản được đăng làm cho không có ý nghĩa kinh doanh ...). –
Vâng, trong khi chờ đợi, Gordon rút lại câu hỏi/phản đối bài đăng của bạn, vì vậy đó là điểm tranh luận. Tôi vừa mới cài đặt phiên bản Enterprise trên một trong các máy tính của tôi (tôi là một người đam mê học tập cho bản thân mình) - câu hỏi của bạn là tạo động lực cho ngày hôm nay, hãy thử chính xác những gì bạn mô tả và xác nhận nó. Nó được biết rằng đôi khi ngay cả các tài liệu là sai, chỉ cần giữ cho rằng trong tâm trí. – mathguy