使用 ANSI 编码标准创建物化视图
Materialized View creation using ANSI coding standards
我在 Oracle 11g2 上工作,遇到了以下情况谁能解释一下背后的原因。我找不到合适的文档。
问题:
我无法使用以下包含 ANSI 编码标准的查询创建 FAST REFRESH Materialized View,但如果我使用常规编码标准,则可以创建它。
如果需要任何进一步的信息,请告诉我。
**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.**
您不能使用 ANSI 连接语法,使用旧的 Oracle 连接语法。这是 Oracle 中的错误。
也来自 oracle 文档 http://docs.oracle.com/cd/B19306_01/server.102/b14223/basicmv.htm,
定义仅具有 连接且没有聚合的物化视图查询 对快速刷新有以下限制:
来自"General Restrictions on Fast Refresh"的所有限制。General restriction
它们不能有 GROUP BY 子句或聚合。
FROM列表中所有表的rowids必须出现在SELECT
查询列表。
物化视图日志必须与所有基表的 rowid 一起存在
在查询的 FROM 列表中。
我在 Oracle 11g2 上工作,遇到了以下情况谁能解释一下背后的原因。我找不到合适的文档。
问题:
我无法使用以下包含 ANSI 编码标准的查询创建 FAST REFRESH Materialized View,但如果我使用常规编码标准,则可以创建它。
如果需要任何进一步的信息,请告诉我。
**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.**
您不能使用 ANSI 连接语法,使用旧的 Oracle 连接语法。这是 Oracle 中的错误。
也来自 oracle 文档 http://docs.oracle.com/cd/B19306_01/server.102/b14223/basicmv.htm,
定义仅具有 连接且没有聚合的物化视图查询 对快速刷新有以下限制:
来自"General Restrictions on Fast Refresh"的所有限制。General restriction
它们不能有 GROUP BY 子句或聚合。
FROM列表中所有表的rowids必须出现在SELECT
查询列表。物化视图日志必须与所有基表的 rowid 一起存在 在查询的 FROM 列表中。