Ich möchte eine Abfrage ausführen, die Daten aus einem anderen als dem in der DB-Verbindung angegebenen Schema auswählt (gleicher Oracle-Server, gleiche Datenbank, anderes Schema)
Ich habe eine Python-App, die mit einem Oracle-Server kommuniziert. Es öffnet eine Verbindung zur Datenbank (Server / Schema) A und führt Select-Abfragen für Tabellen innerhalb dieser Datenbank aus.
Ich habe Folgendes versucht:
%Vor%Aber ich verstehe:
%Vor%Ich habe auch versucht, den Schemanamen mit Klammern zu umgeben:
%Vor%Ich bekomme:
%Vor%Die Abfragen werden mit dem cx_Oracle Python-Modul in einer Django-App ausgeführt.
Kann das gemacht werden oder sollte ich eine neue db Verbindung herstellen?
Hat der Benutzer, mit dem Sie eine Verbindung zur Datenbank herstellen (Benutzer A
in diesem Beispiel), SELECT
access für die Objekte im Schema PCT
? Unter der Annahme, dass A
diesen Zugriff nicht hat, erhalten Sie den Fehler "Tabelle oder Ansicht existiert nicht".
Sehr wahrscheinlich benötigen Sie Ihren DBA, um dem Benutzer A
Zugriff auf alle Tabellen im Schema PCT
zu gewähren, die Sie benötigen. Etwas wie
Sobald dies erledigt ist, sollten Sie in der Lage sein, auf die Objekte im Schema PCT
zu verweisen, indem Sie die Syntax pct.pi_int
verwenden, wie Sie es anfangs in Ihrer Frage gezeigt haben. Der Bracket-Syntax-Ansatz funktioniert nicht.
Zusätzlich zu den Grants können Sie versuchen, Synonyme zu erstellen. Dadurch müssen Sie nicht jedes Mal das Tabelleneignerschema angeben.
Aus dem verbindenden Schema;
SYNONYM ERSTELLEN pi_int FÜR pct.pi_int;
Dann können Sie pi_int als;
abfragenSELECT * FROM pi_int;
Abhängig von dem Schema / Konto, das Sie für die Verbindung mit der Datenbank verwenden, würde ich vermuten, dass Sie dem Konto, mit dem Sie eine Verbindung zur Datenbank herstellen, keine Berechtigung erteilen.
Verbinden Sie sich als PCT-Konto in der Datenbank und erteilen Sie dem Konto, das Sie verwenden, den Auswahlzugriff für die Tabelle.
bewilligen Sie die Auswahl von pi_int für Account_used_to_connect