2011-05-19 22 views
5

Estoy confundido acerca de las vistas materializadas. O bien, es el IDE Toad el que estoy usando lo que me confunde, o es que no entiendo lo suficiente MVs.Oracle: confusión de la vista materializada (¿está equivocado el IDE de Toad al mostrar MV en la sección de tablas?)

creé una vista materializada en Oracle por algo como esto ....

CREATE MATERIALIZED VIEW TESTRESULT 
NOCACHE 
LOGGING 
NOCOMPRESS 
NOPARALLEL 
BUILD IMMEDIATE 
REFRESH FORCE ON DEMAND 
WITH PRIMARY KEY 
AS 
SELECT ... 
FROM tables... 

yo esperaría que se crea y se rellena con los datos devueltos por la consulta de la vista materializada. De acuerdo, no es gran cosa.

Lo que me confunde es por qué mi Toad IDE muestra una tabla 'TESTRESULT' en la sección de tablas. Incluso tiene un 'Crear guión de tabla' que puedo ver. enter image description here

Pero también veo mi vista materializada en la sección 'Vista Materializada'. enter image description here

¿Detrás de escena está Oracle creando una tabla cuando creo una vista materializada? Parece que hay dos objetos separados, una vista materializada y una tabla? ¿Podría alguien explicar qué ocurre aquí detrás de escena cuando se crea una vista materializada? ¿Toad está equivocado o estoy malinterpretando algo?

versión sapo: 9.6.1.1 Oracle: 10g

Respuesta

9

Sí, detrás de las escenas, Oracle crea dos objetos, una mesa donde los resultados son en realidad materializada y una vista materializada que tiene todos los metadatos (la consulta, los atributos, etc.). Es muy similar a lo que ocurre cuando se crea una restricción única: Oracle crea un índice único con el mismo nombre que la restricción para aplicar realmente la restricción y luego crea una restricción en sí misma. Si crea una vista materializada en una tabla preconstruida, puede terminar con diferentes nombres para la tabla y para la vista materializada del mismo modo que podría crear una restricción que utiliza un índice existente que tiene un nombre diferente.

SQL> select object_name, object_type 
    2 from user_objects 
    3 
SQL> ed 
Wrote file afiedt.buf 

    1 select object_name, object_type 
    2 from user_objects 
    3* where object_name = 'MV_EMP' 
    4/

no rows selected 

SQL> create materialized view mv_emp 
    2 as 
    3 select * 
    4 from emp; 

Materialized view created. 

SQL> column object_name format a30; 
SQL> select object_name, object_type 
    2 from user_objects 
    3 where object_name = 'MV_EMP'; 

OBJECT_NAME     OBJECT_TYPE 
------------------------------ ------------------- 
MV_EMP       TABLE 
MV_EMP       MATERIALIZED VIEW 
+0

Eso tiene mucho sentido, gracias – contactmatt

Cuestiones relacionadas