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.
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.