1

J'essaye d'effectuer l'accord des vues matérialisées dans mon application. Je mets à exécuter:Oracle matérialisé vue réglage

dbms_advisor.tune_mview() 
procédure

, et écrit le code suivant dans un SQL_Worksheet d'Oracle SQL Developer:

variable mvtask varchar2(100); 
variable mvddl varchar2(4000); 

execute :mvtask := 'MV_FOO_BAR'; 
execute select query into :mvddl from user_mviews where view_name = 'MV_FOO_BAR'; 

execute dbms_advisor.tune_mview(:mvtask, :mvddl); 

select * from user_tune_mview; 

De toute évidence, vue matérialisée est déjà créé (avec refresh fast on commmit, qui, cependant, fonctionne de manière inacceptable lente). Le conseiller signale une erreur suivante:

 
Error report: 
ORA-13600: error encountered in Advisor 
QSM-03112: Invalid CREATE MATERIALIZED VIEW statement 
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86 
ORA-06512: at "SYS.PRVT_ACCESS_ADVISOR", line 202 
ORA-06512: at "SYS.PRVT_TUNE_MVIEW", line 1026 
ORA-06512: at "SYS.DBMS_ADVISOR", line 754 
ORA-06512: at line 1 
13600. 00000 - "error encountered in Advisor\n%s" 
*Cause: An error occurred in the Advisor. 
      This message will be followed by a second message giving 
      more details about the nature of the error. 
*Action: See the Advisor documentation 
      for an explanation of the second error message. 

Mais, il n'y a rien de plus signalé, aucune trace du second message d'erreur. Est-ce que quelqu'un sait quel est le problème ici? Je suis d'autant plus surpris que la MV existe déjà et fonctionne dans la base de données, quoique lentement. Sur une note connexe, quelqu'un sait comment entrer une chaîne multiligne dans SQL Developer. Lorsque j'essaie quelque chose comme:

execute :mvddl :='create materialized view MV_FOO_BAR 
build immediate 
refresh fast on commit 
... 
'; 

SQL Developer s'étouffe sur la première ligne. La concaténation de cordes a traversé mon esprit, mais j'ai plusieurs MV de 100-150 lignes et je détesterais le faire manuellement pour chacun d'entre eux.

Répondre

6

(1) Lorsque le texte de l'erreur 13600 fait référence au "deuxième message d'erreur", cela signifie l'erreur suivante dans la pile - dans ce cas, QSM-03112.

(2) La raison de l'erreur, je crois, est que le deuxième paramètre dans l'appel à TUNE_MVIEW est censé être le texte complet d'une instruction CREATE MATERIALIZED VIEW, mais vous passez juste le texte de requête.

(3) Pour la question sur plusieurs lignes, je pense qu'il ne fonctionnera que si vous utilisez un bloc anonyme explicite PL/SQL au lieu de « exécuter », .: par exemple

BEGIN 
    :mvddl := 'create materialized view MV_FOO_BAR 
      build immediate 
      refresh fast on commit 
      ... 
      '; 
END; 
/
+0

+1 Bonne réponse concise. – DCookie

+0

Еexactement ce dont j'avais besoin. Merci. – javashlook

Questions connexes