Der erste Schritt bei der Diagnose eines Problems beim Erstellen einer Ansicht besteht darin, select auszuprobieren Teil für sich. In diesem Fall würden Sie immer noch den Fehler ORA-00942 erhalten, aber das Problem ist jetzt nur noch ein Abfrage- und Zugriffsproblem und hat nichts mit der Ansicht zu tun.
Wenn Sie ORA-00942:Tabelle oder Ansicht existiert nicht erhalten , weil entweder:
-
Der von Ihnen eingegebene Tabellen- oder Ansichtsname existiert wirklich nicht.
-
Überprüfen Sie die Rechtschreibung - vielleicht liegt ein Tippfehler vor.
-
Sind Sie mit einer Datenbank verbunden, wo es existiert? Vielleicht sind Sie auf einem Testsystem, das es nicht hat.
-
Fragen Sie
dba_objectsab um zu sehen, ob die Tabelle in einem anderen Schema vorhanden ist. (Wenn Sie keine Berechtigungen zum Abfragen von dba_objects,all_objectslistet alles auf, zu dessen Anzeige Sie berechtigt sind, was hilfreich sein kann.)
-
-
Es existiert wirklich, aber es ist in einem anderen Schema.
In diesem Fall gibt es zwei mögliche Probleme:-
Sie sind nicht berechtigt, sie abzufragen. Der Eigentümer der Tabelle muss
grant read on xyz(Ersetzen Siexyzdurch den tatsächlichen Tabellennamen ) entweder-
du
-
public(wenn Sie möchten, dass jeder die Daten sehen kann, nicht immer ratsam) -
eine Rolle die Sie haben (aber Rollen werden nicht von gespeichertem PL/SQL oder Ansichten , daher ist es möglich, dass Sie dank einer Rolle, die Sie haben, eine Tabelle in einem anderen Schema abfragen können, aber dennoch keine Ansicht oder Prozedur erstellen können, die sie verwendet.)
-
-
Sie müssen das Schema angeben. Angenommen, Sie möchten die
REGIONSabfragen Tabelle inHRaber Sie sind alsSCOTTverbunden . Wenn Sie einfachselect * from regionses wird nachSCOTT.REGIONSgesucht , die es nicht gibt. Führen Sie einen der folgenden Schritte aus, um dies zu beheben:-
Verwenden Sie
hr.regionsausdrücklich in Ihrer Abfrage. -
create or replace synonym regions for hr.regions;
Jetzt immer, wenn Sie sich aufregionsbeziehen , leitet die Datenbank automatisch zuhr.regionsum . -
in jedem Schema mit der Berechtigung zum Erstellen öffentlicher Synonyme:
create or replace public synonym regions for hr.regions;
Jetzt hat jeder, der sich mit der Datenbank verbindet, Verweise aufregionsumgeleitet zuhr.regions, was nicht immer eine gute Idee ist, aber es ist trotzdem eine Option. -
alter session set current_schema = hr;
Jetzt ist das Standardschema zum Auflösen von ObjektnamenHRund nicht die, bei der Sie sich angemeldet haben. Für Anwendungen, die sich immer als ein anderer Benutzer anmelden als der, dem die Tabellen gehören, können Sie einen nach dem Logon-Trigger das ist also immer gesetzt. Dann können sie sich einfach aufregionsbeziehen usw., ohne ein Schema angeben zu müssen und ohne Synonyme.
-
-