Выберите данные из другой схемы в 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