2012-07-19 108 views
36

Iam cercando di aggiornare la vista materializzata utilizzando:Come aggiornare vista materializzata in Oracle

DBMS_MVIEW.REFRESH('v_materialized_foo_tbl') 

Ma è gettare istruzione SQL non valida.

Poi ho creato una stored procedure come questa:

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

Questa procedura è stato creato con successo, ma quando io chiamo questa procedura con

MAT_VIEW_FOO_TBL; 

si tratta di gettare di nuovo un errore.

Gentilmente suggerire una soluzione per questo problema.

Grazie, Srinivas

+4

stai usando 'exec DBMS_MVIEW.REFRESH ('v_materialized_foo_tbl');' oppure 'exec MAT_VIEW_FOO_TBL' o' BEGIN DBMS_MVIEW.REFRESH ('v_materialized_foo_tbl'); END; '? Ognuno di questi dovrebbe funzionare. –

+0

Ho provato con exec MAT_VIEW_FOO_TBL; anche BEGIN DBMS_MVIEW.REFRESH ('v_materialized_foo_tbl'); FINE; ma non ha funzionato. – Srinivas

+0

Penso che lo stiate eseguendo da php come istruzione sql. Dovrebbe essere eseguito come procedura. Non lo so php. Come chiamate queste affermazioni. Da Toad/SQLDeveloper o con php? –

risposta

35

provate questo:

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

primo parametro è nome mat_view e secondo definisce tipo di refresh. f indica un aggiornamento rapido. ma tieni a mente che sarà ignorare qualsiasi altra opzione di temporizzazione di aggiornamento.

+2

Funziona bene in un IDE come SQL Developer, ma se lo stai eseguendo dal codice (come ODP.NET ecc.), allora deve essere racchiuso in BEGIN & END come suggerisce @Waqas Ali. –

+1

@TomHalladay C'è qualcosa di sbagliato nell'usare "EXECUTE" per questo? (La funzione raw di certo non funzionava da SQL Developer per me.) – jpmc26

44

eseguire questo script per aggiornare i dati in vista materializzata:

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

Sopra il codice viene testato varie volte, e funziona bene, nessuna eccezione/errore Ci possono essere alcuni problemi con il tuo strumento/meccanismo ecc. –

1

Se si lavora con SQL Developer, è necessario mettere il dbms_view in minuscolo. Il resto ha compilato bene anche se non ho ancora chiamato la procedura dal codice.

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

un po 'tardi per il gioco, ma ho trovato un modo per rendere la sintassi originale in questo lavoro domanda (sono su Oracle 11g)

** primo switch a schema dell'albero MV * *

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

in alternativa è possibile aggiungere alcune opzioni:

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

questo funziona in realtà per me, e l'aggiunta di Parall L'opzione elism ha accelerato la mia esecuzione circa 2,5 volte.

Maggiori informazioni qui: How to Refresh a Materialized View in Parallel

4

È possibile aggiornare completamente una vista materializzata come segue:

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

Provare a usare la seguente sintassi:

sintassi comune:

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

Esempio:

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

Spero che quanto sopra aiuti.

0

La migliore opzione è utilizzare "?" argomento per il metodo. In questo modo DBMS_MVIEW sceglierà il modo migliore per aggiornare, quindi farà il più rapido aggiornamento possibile per te. e non fallirà se proverai qualcosa come method => 'f' quando hai effettivamente bisogno di un aggiornamento completo. :-)

dal prompt SQL * Plus:

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

Quando dobbiamo utilizzare procedure incorporati o pacchetti che dobbiamo usare "Esegui" il comando allora funzionerà.

EX:

ESEGUI DBMS_MVIEW.REFRESH exec ('v_materialized_foo_tbl');

+2

Benvenuti in Stackoverflow. Prenditi un po 'di tempo per leggere h devo scrivere una buona risposta. leggi [questo] (http://meta.stackexchange.com/a/7659/338114) e [questo] (http://stackoverflow.com/help/how-to-answer) –

Problemi correlati