web-dev-qa-db-fra.com

Vue matérialisée: Compilation_Error

Lors de l'exécution du code suivant sur le schéma Scott, je reçois une compilation_error. Qu'est-ce que je fais mal ici? Je ne me dis même pas quelle est l'erreur.

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  

Toute aide est appréciée.

Mise à jour

Avec Oracle 12C, ce problème semble être résolu.

3
Pmarcoen

Il semble que Oracle n'aime pas les jointures de style Ansi dans la définition de la vue matérialisée lors de la référencement ...

Changer la définition à

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;

rend ça marche pour moi.

Voir http://sqlfiddle.com/#!4/f706b/1

Modification de la définition dans le SQL Fiddle retour à celui inclus dans la question provoquera le staleness doit être COMPILATION_ERROR.

Personnellement, je classerais cela comme un travail autour plutôt qu'une réponse.

4
Colin 't Hart