SCOTTスキーマで次のコードを実行すると、compilation_errorを受け取ります。ここで何が悪いのですか?私はエラーが何であるかさえ教えてくれません。
SQL> create materialized view dept_emp_mv as (
2 select dname, job, hiredate, count(*) nbr
3 from emp e
4 join dept d on e.deptno = d.deptno
5 group by dname,hiredate,job);
Materialized view created.
SQL>
SQL> select staleness from user_mviews where lower(mview_name) = 'dept_emp_mv';
STALENESS
-------------------
FRESH
SQL>
SQL> insert into emp values (8003, 'TEST', 'TEST', 7902, to_date('20131127','YYYYMMDD'), 2500, null, 20);
1 row created.
SQL>
SQL> commit;
Commit complete.
SQL>
SQL> select staleness from user_mviews where lower(mview_name) = 'dept_emp_mv';
STALENESS
-------------------
NEEDS_COMPILE
SQL>
SQL> execute DBMS_SNAPSHOT.REFRESH('DEPT_EMP_MV','C', parallelism => 1);
PL/SQL procedure successfully completed.
SQL>
SQL> select staleness from user_mviews where lower(mview_name) = 'dept_emp_mv';
STALENESS
-------------------
COMPILATION_ERROR
どんな助けでもありがたいです。
更新
Oracle 12cでは、この問題は解決されているようです。
Oracleは、マテリアライズドビューの定義でANSIスタイルの結合を参照するとき、マッシュアップビューを好きではないようです...
定義を
create materialized view dept_emp_mv as
select dname, job, hiredate, count(*) as nbr
from emp e, dept d
where e.deptno = d.deptno
group by dname,hiredate,job;
私のためにそれを動作させます。
参照 http://sqlfiddle.com/#!4/f706b/1
SQLの定義を変更するFiddle質問に含まれているものに戻すと、staleness
がCOMPILATION_ERROR
になります。
個人的には、これを答えではなく回避策として分類します。