2012-07-19 24 views
36

Iam tratando de actualizar la vista materializada mediante el uso de:Cómo refrescar la vista materializada en el oráculo

DBMS_MVIEW.REFRESH('v_materialized_foo_tbl') 

Pero se está lanzando instrucción SQL válida.

entonces he creado un procedimiento almacenado de esta manera:

CREATE OR REPLACE 
PROCEDURE MAT_VIEW_FOO_TBL 
IS 
BEGIN 
    DBMS_MVIEW.REFRESH('v_materialized_foo_tbl') 
END MAT_VIEW_FOO_TBL IS; 

Este procedimiento se ha creado con éxito pero cuando estoy llamando este procedimiento con

MAT_VIEW_FOO_TBL; 

Es lanzando un error de nuevo.

Por favor, sugiera una solución para este problema.

Gracias, Srinivas

+4

¿Está utilizando 'exec DBMS_MVIEW.REFRESH ('v_materialized_foo_tbl');' o 'exec MAT_VIEW_FOO_TBL' o' BEGIN DBMS_MVIEW.REFRESH ('v_materialized_foo_tbl'); END; '? Cualquiera de estos debería funcionar –

+0

Intenté con el ejecutor MAT_VIEW_FOO_TBL; también BEGIN DBMS_MVIEW.REFRESH ('v_materialized_foo_tbl'); FIN; pero no funcionó. – Srinivas

+0

Creo que lo está ejecutando desde php como instrucción sql. Se debe ejecutar como un procedimiento. No sé php. Cómo llamas a esas declaraciones. De Toad/SQLDeveloper o con php? –

Respuesta

35

intente esto:

DBMS_SNAPSHOT.REFRESH('v_materialized_foo_tbl','f'); 

parámetro primera es el nombre de mat_view y segundo define tipo de refresh. f denota una actualización rápida. pero tenga esto en cuenta que anulará cualquier otra opción de actualización de tiempo.

+2

Esto funciona bien en un IDE como SQL Developer, pero si lo estás ejecutando desde un código (como ODP.NET, etc.), entonces tiene que estar envuelto en BEGIN & END como @Waqas Ali sugiere. –

+1

@TomHalladay ¿Hay algo de malo en usar 'EXECUTE' para eso? (La función raw ciertamente no funcionó desde SQL Developer para mí.) – jpmc26

44

Ejecutar este proceso para actualizar los datos en la vista materializada:

BEGIN 
DBMS_SNAPSHOT.REFRESH('Name here'); 
END; 
+0

El código anterior se prueba varias veces, y funciona bien, sin excepción/error. Puede haber algún problema con su herramienta/mechane, etc. –

1

Si está trabajando con SQL Developer, usted tiene que poner la dbms_view en minúsculas. El resto compilado bien para mí, aunque todavía no he llamado al procedimiento desde el código.

CREATE OR REPLACE PROCEDURE "MAT_VIEW_FOO_TBL" AS 
BEGIN 
    dbms_mview.refresh('v_materialized_foo_tbl'); 
END; 
6

un poco tarde al juego, pero he encontrado una manera de hacer la sintaxis original en esta obra cuestión (estoy en Oracle 11g)

** primer interruptor de esquema de la MV * *

EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW'); 

alternativa, se puede añadir algunas opciones:

EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW',PARALLELISM=>4); 

esto realmente funciona para mí, y la adición de PARALL la opción elism aceleró mi ejecución aproximadamente 2.5 veces.

Más información aquí: How to Refresh a Materialized View in Parallel

4

puede actualizar una vista materializada por completo de la siguiente manera:

EXECUTE 
DBMS_SNAPSHOT.REFRESH('Materialized_VIEW_OWNER_NAME.Materialized_VIEW_NAME','COMPLETE'); 
0

Trate de usar la siguiente sintaxis:

Común Sintaxis:

begin 
dbms_mview.refresh('mview_name'); 
end; 

Ejemplo:

begin 
dbms_mview.refresh('inv_trans'); 
end; 

Espero que lo anterior ayude.

0

La mejor opción es utilizar el '?' argumento para el método. De esta forma, DBMS_MVIEW elegirá la mejor manera de actualizar, por lo que hará la actualización más rápida posible para usted. , y no fallará si prueba algo como method => 'f' cuando realmente necesita una actualización completa. :-)

del sistema SQL * Plus:

EXEC DBMS_MVIEW.REFRESH('my_schema.my_mview', method => '?'); 
-1

Cuando tenemos que utilizar procedimientos o paquetes que tenemos que utilizar incorporadas "ejecutar" comando entonces todo funcionará bien.

EX:

EXECUTE DBMS_MVIEW.REFRESH exec ('v_materialized_foo_tbl');

+2

Bienvenido a Stackoverflow. Por favor, tómese un tiempo para leer h cómo escribir una buena respuesta. lea [esto] (http://meta.stackexchange.com/a/7659/338114) y [este] (http://stackoverflow.com/help/how-to-answer) –

Cuestiones relacionadas