Выберите данные из другой схемы в oracle

Я хочу выполнить запрос, который выбирает данные из другой схемы, чем та, которая указана в соединении с БД (тот же сервер Oracle, та же база данных, другая схема)

у меня есть приложение python, разговаривающее с сервером Oracle. Он открывает соединение с базой данных (сервер/схема) A и выполняет запросы select к таблицам внутри этой базы данных.

Я пробовал следующие :

select .... 
from pct.pi_int, pct.pi_ma, pct.pi_es
where ...

А я:

ORA-00942: table or view does not exist

Я также пробовал окружать имя схемы в скобках:

from [PCT].pi_int, [PCT].pi_ma, [PCAT].pi_es

Я:

ORA-00903: invalid table name

запросы выполняются с помощью модуля cx_oracle python из приложения Django.

можно ли это сделать или мне сделать новое соединение с БД?

3 ответов


пользователь, который вы используете для подключения к базе данных ( в этом примере) у SELECT доступ к объектам в PCT - схемы? Предполагая, что A не имеет этого доступа, вы получите ошибку" таблица или представление не существует".

скорее всего, вам нужен ваш DBA, чтобы предоставить пользователю A доступ к любым таблицам в PCT схема, которая вам нужна. Что-то вроде

GRANT SELECT ON pct.pi_int
   TO a;

как только это будет сделано, вы сможете ссылаться к объектам в PCT схема с использованием синтаксиса pct.pi_int как вы продемонстрировали изначально в своем вопросе. Подход к синтаксису скобок не будет работать.


В дополнение к субсидиям, вы можете попробовать создать синонимы. Это позволит избежать необходимости указывать схему владельца таблицы каждый раз.

из схемы подключения:

CREATE SYNONYM pi_int FOR pct.pi_int;

тогда вы можете запросить pi_int as:

SELECT * FROM pi_int;

в зависимости от схемы/учетной записи, которую вы используете для подключения к базе данных, я подозреваю, что вам не хватает гранта для учетной записи, которую вы используете для подключения к базе данных.

подключить как учетную запись PCT в базе данных, а затем предоставить учетную запись, которую вы используете выберите доступ к таблице.

grant select on pi_int to Account_used_to_connect