ORA-00942: Tabelle oder Sicht existiert nicht (funktioniert wenn eine separate SQL, funktioniert aber nicht innerhalb einer Oracle-Funktion)
Wenn ich eine sql-Anweisung, wie select * from table1
funktioniert es Super, aber sobald ich es in eine Funktion, die ich bekomme:
ORA-00942: table or view does not exist
Wie man dieses Problem lösen?
InformationsquelleAutor der Frage Victor | 2011-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar Dinge, die Sie betrachten könnte. Basierend auf Ihre Frage, wie es aussieht ist die Funktion Eigentümer unterscheidet sich von der Tabelle Besitzer.
1) Zuschüsse werden über eine Rolle : um das erstellen von gespeicherten Prozeduren und Funktionen auf einem anderen Benutzer die Objekte, die Sie benötigen direkten Zugriff auf die Objekte (anstelle des Zugriffs über eine Rolle).
2)
Wenn Sie eine Tabelle erstellt, die in Schema A und die Funktion im Schema B, sollten Sie einen Blick auf die Oracle-Invoker/Definer Rights Konzepte zu verstehen, was könnte die Ursache des Problems.
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#LNPLS00809
InformationsquelleAutor der Antwort Rajesh Chamarthi
Gibt es eine starke chance, dass die Privilegien wählen Sie aus Tabelle1 erteilt wurden, eine Rolle, und die Rolle wurde Ihnen gewährt. Privilegien, die einer Rolle sind nicht verfügbar, PL/SQL, geschrieben von dem Benutzer, selbst wenn der Benutzer erteilt wurde, hat die Rolle.
Sehen Sie dies eine Menge für die Nutzer, die erteilt wurden die dba-Rolle auf Objekte im Besitz von sys. Ein Benutzer mit dba-Rolle werden in der Lage sein zu sagen,
SELECT * from V$SESSION
aber nicht in der Lage sein, um eine Funktion schreiben, die beinhaltetSELECT * FROM V$SESSION
.Das Update zu gewähren, explizite Berechtigungen auf das Objekt in Frage, um den Benutzer direkt, z.B. im obigen Fall, den SYS-Benutzer
GRANT SELECT ON V_$SESSION TO MyUser;
InformationsquelleAutor der Antwort Steve Broberg
Stellen Sie sicher, die Funktion ist in der gleichen DB-schema als Tabelle.
InformationsquelleAutor der Antwort Adrian Carneiro
Entweder u dont haben die Erlaubnis, das schema/Tabelle ODER die Tabelle nicht existiert.
Meistens dieses Problem ist aufgetreten, wenn Sie mit anderen schema-Tabellen in den gespeicherten Prozeduren.
ZB. Wenn Sie mit einer Gespeicherten Prozedur von user/ABC-schema und in der gleichen PL/SQL gibt es Tabellen, die vom Benutzer/schema XYZ. In diesem Fall ABC haben sollten, GEWÄHREN, D. H. Vorrechte, die den XYZ-Tabellen
Grant All On Zum ABC;
InformationsquelleAutor der Antwort Ravindra Junghare
Eine sehr einfache Lösung ist das hinzufügen der name der Datenbank mit Ihren Tabellen Namen wie, wenn dein DB-name ist
DBMS
und Tabelleinfo
dann wird esDBMS.info
für jede Abfrage.Wenn Ihre Abfrage ist
es vielleicht ein Fehler, aber
es nicht, weil jetzt eigentlich dein Tisch ist gefunden.
InformationsquelleAutor der Antwort Ankit Neekhra