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_objects
ab um zu sehen, ob die Tabelle in einem anderen Schema vorhanden ist. (Wenn Sie keine Berechtigungen zum Abfragen von dba_objects,all_objects
listet 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 Siexyz
durch 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
REGIONS
abfragen Tabelle inHR
aber Sie sind alsSCOTT
verbunden . Wenn Sie einfachselect * from regions
es wird nachSCOTT.REGIONS
gesucht , die es nicht gibt. Führen Sie einen der folgenden Schritte aus, um dies zu beheben:-
Verwenden Sie
hr.regions
ausdrücklich in Ihrer Abfrage. -
create or replace synonym regions for hr.regions;
Jetzt immer, wenn Sie sich aufregions
beziehen , leitet die Datenbank automatisch zuhr.regions
um . -
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 aufregions
umgeleitet 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 ObjektnamenHR
und 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 aufregions
beziehen usw., ohne ein Schema angeben zu müssen und ohne Synonyme.
-
-