Je souhaite exécuter une requête qui sélectionne les données d'un schéma différent de celui spécifié dans la connexion DB (même serveur Oracle, même base de données, schéma différent)
J'ai une application python parlant à un serveur Oracle. Elle ouvre une connexion à la base de données (serveur/schéma) A et exécute certaines requêtes sur les tables de cette base de données.
J'ai essayé ce qui suit:
select ....
from pct.pi_int, pct.pi_ma, pct.pi_es
where ...
Mais je reçois:
ORA-00942: table or view does not exist
J'ai également essayé d'entourer le nom du schéma avec des crochets:
from [PCT].pi_int, [PCT].pi_ma, [PCAT].pi_es
Je reçois:
ORA-00903: invalid table name
Les requêtes sont exécutées à l'aide du module cx_Oracle python depuis l'intérieur d'une application Django.
Cela peut-il être fait ou dois-je établir une nouvelle connexion db?
L'utilisateur que vous utilisez pour vous connecter à la base de données (utilisateur A
dans cet exemple) dispose-t-il d'un accès SELECT
sur les objets du schéma PCT
? En supposant que A
ne dispose pas de cet accès, vous obtiendrez l'erreur "la table ou la vue n'existe pas".
Très probablement, vous avez besoin de votre DBA pour accorder à l'utilisateur A
l'accès aux tables du schéma PCT
dont vous avez besoin. Quelque chose comme
GRANT SELECT ON pct.pi_int
TO a;
Une fois cela fait, vous devriez pouvoir vous référer aux objets dans le schéma PCT
en utilisant la syntaxe pct.pi_int
comme vous l'avez démontré initialement dans votre question. L'approche de la syntaxe des crochets ne fonctionnera pas.
En plus des subventions, vous pouvez essayer de créer des synonymes. Cela évite d'avoir à spécifier à chaque fois le schéma du propriétaire de la table.
A partir du schéma de connexion:
CREATE SYNONYM pi_int FOR pct.pi_int;
Ensuite, vous pouvez interroger pi_int
comme:
SELECT * FROM pi_int;
Selon le schéma/compte que vous utilisez pour vous connecter à la base de données, je soupçonne qu'il vous manque une autorisation pour le compte que vous utilisez pour vous connecter à la base de données.
Connectez-vous en tant que compte PCT dans la base de données, puis accordez au compte que vous utilisez l'accès sélectif à la table.
grant select on pi_int to Account_used_to_connect