web-dev-qa-db-ja.com

マテリアライズドビュー:compilation_error

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では、この問題は解決されているようです。

3
Pmarcoen

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質問に含まれているものに戻すと、stalenessCOMPILATION_ERRORになります。

個人的には、これを答えではなく回避策として分類します。

4
Colin 't Hart