我正在研究Oracle 11g2并遇到以下情况,任何人都可以解释其背后的原因。我找不到相同的文件。
的问题:
我无法使用包含ANSI编码标准的以下查询创建 FAST REFRESH物化视图,但如果我使用传统的编码标准,那么我就可以创建它。
如果需要任何进一步的信息,请告诉我。
**EMP Table:**
EMP_ID NUMBER
EMP_NAME VARCHAR2(100)
DEPT_ID NUMBER
**DEPT Table:**
DEPT_ID NUMBER
DEPT_NAME VARCHAR2(100)
--Mat View Logs creation
CREATE MATERIALIZED VIEW LOG ON EMP WITH ROWID ;
CREATE MATERIALIZED VIEW LOG ON DEPT WITH ROWID;
CREATE MATERIALIZED VIEW EMP_DEPT_MV
REFRESH FAST
AS
SELECT EMP_ID,EMP_NAME,EMP.DEPT_ID,DEPT_NAME,EMP.ROWID E_R,DEPT.ROWID D_R
FROM EMP
INNER
JOIN DEPT
ON EMP.DEPT_ID=DEPT.DEPT_ID;
**SQL Error: ORA-12015: cannot create a fast refresh materialized view from a complex query
12015. 00000 - "cannot create a fast refresh materialized view from a complex query"**
CREATE MATERIALIZED VIEW EMP_DEPT_MV
REFRESH FAST
AS
SELECT EMP_ID,EMP_NAME,EMP.DEPT_ID,DEPT_NAME,EMP.ROWID E_R,DEPT.ROWID D_R
FROM EMP,DEPT
WHERE EMP.DEPT_ID=DEPT.DEPT_ID;
**Materialized view EMP_DEPT_MV created.**
答案 0 :(得分:1)
您不能使用 ANSI 连接语法,请使用旧的Oracle连接语法。这是Oracle中的一个错误。
也是oracle docs http://docs.oracle.com/cd/B19306_01/server.102/b14223/basicmv.htm,
使用仅加入而没有聚合定义具体化视图的查询对快速刷新有以下限制:
"快速刷新的一般限制"。General restriction
他们不能拥有GROUP BY子句或聚合。
FROM列表中所有表的Rowid必须出现在SELECT
中
查询列表。
物化视图日志必须与所有基表的rowid一起存在 在查询的FROM列表中。