J'ai créé une vue matérialisée avec le DI_TEST_AL
utilisateur, nommez-le MY_MVIEW
. Il apparaît dans le USER_OBJECTS
table comme MATERIALIZED VIEW
, J'essaie de le laisser tomber, je reçois un message de réussite, mais l'objet est toujours là. En fait, si j'essaie de le reconstituer, je reçois une erreur comme "l'objet existe déjà".
Je vois qu'il y a une table avec le même nom appartenant à un autre schéma. Je suppose que cela ne devrait pas causer le problème, mais j'ai eu envie de le mentionner.
Voici la sortie SQL * Plus:
SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 1 17:01:50 2011
SQL> select object_name, object_type, owner from all_objects where object_name = 'MY_MVIEW';
OBJECT_NAME OBJECT_TYPE OWNER
----------- ----------------- ----------
MY_MVIEW MATERIALIZED VIEW DI_TEST_AL
MY_MVIEW TABLE DIDEV11
SQL> DROP MATERIALIZED VIEW MY_MVIEW;
Materialized view dropped.
SQL> select object_name, object_type, owner from all_objects where object_name = 'MY_MVIEW';
OBJECT_NAME OBJECT_TYPE OWNER
----------- ----------------- ----------
MY_MVIEW MATERIALIZED VIEW DI_TEST_AL
MY_MVIEW TABLE DIDEV11
SQL>
J'ai vérifié ma permission et DROP ALL MATERIALIZED VIEWS
est accordé au DI_TEST_AL
utilisateur.
J'ai confronté un problème similaire lorsque j'ai essayé de laisser tomber la vue matérialisée, il est indiqué que la vue n'existe pas. Si j'essaie de le créer, il est indiqué que le nom existe déjà. Ceci est un bogue dans Oracle.
Avant de laisser tomber la vue, interrogez sur All_Objects Table.
SQL: Sélectionnez * à partir d'All_Objects où Object_Name = 'my_mview'; Il devrait renvoyer 2 enregistrements, ojbect_type = table et objet_type = vue matérialisée.
Mais si sa affichage d'un seul enregistrement avec Object_Type = Table, supprimez cette table de la base de données
Drop Table my_mview;
Et essayez de recréer la vue matérialisée. Cela devrait fonctionner.